//双链表
//head->a->b->c->NULL
//head<-a<-b<-c
#include <stdio.h>
struct node
{
int element;
struct node* previous;
struct node* next;
};
struct node* FindPreofDelete(struct node* head,int element)
{
struct node* t=head;
while(t->next!=NULL&&t->next->element!=element)
t=t->next;
return t;
};
struct node* FindPreofInsert(struct node* head,int element)
{
struct node* t=head;
while(t->next!=NULL&&t->next->element<=element)
t=t->next;
return t;
};
struct node* Delete(struct node* head,int element)
{
struct node* t=FindPreofDelete(head,element);
if(t->next==NULL){
printf("Not Exist!\n");
return head;
}
if(t->next->next==NULL){
free(t->next);
t->next=NULL;
return head;
}
struct node* temp=t->next;
t->next=temp->next;
temp->next->previous=t;
free(temp);
};
struct node* Insert(struct node* head,int element)
{
struct node* p;
p=(struct node*)malloc(sizeof(struct node));
p->element=element;
p->next=NULL;
if(head->next==NULL){//插到头节点后
head->next=p;
p->previous=head;
return head;
}
struct node* t=FindPreofInsert(head,element);
if(t->next==NULL){//插到尾节点后
t->next=p;
p->previous=t;
return head;
}
p->previous=t;
p->next=t->next;
t->next->previous=p;
t->next=p;
return head;
}
int main()
{
struct node* head;
head=(struct node*)malloc(sizeof(struct node));
head->next=NULL;
head->previous=NULL;
//Insert
head=Insert(head,10);
//Delete
head=Delete(head,10);
return 0;
}