#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node* pre;
struct Node* next;
}MyNode;
MyNode* initList(){
MyNode* List=(MyNode*)malloc(sizeof(MyNode));
List->data=0;
List->next=NULL;
List->pre=NULL;
return List;
}
void headInsert(MyNode* List,int data){
MyNode* node=(MyNode*)malloc(sizeof(MyNode));
node->data=data;
if(List->data==0){
node->next=List->next;
node->pre=List;
List->next=node;
}else{
node->pre=List;
node->next=List->next;
List->next->pre=node;
List->next=node;
}
List->data++;
}
void tailInsert(MyNode* List,int data){
MyNode* node=(MyNode*)malloc(sizeof(MyNode));
node->data=data;
List->data++;
while(List->next){
List=List->next;
}
List->next=node;
node->next=NULL;
node->pre=List;
}
void delete(MyNode* List,int data){
List->data--;
List=List->next;
while(List->data!=data){
List=List->next;
}
if(List->next!=NULL){
List->pre->next=List->next;
List->next->pre=List->pre;
}else{
List->pre->next=NULL;
}
free(List);
}
void printList(MyNode* List){
MyNode* node=List->next;
while(node){
printf("%d->",node->data);
node=node->next;
}
printf("over!\n");
}
int main() {
MyNode* list=initList();
headInsert(list,1);
headInsert(list,2);
headInsert(list,3);
headInsert(list,4);
tailInsert(list,0);
tailInsert(list,5);
tailInsert(list,6);
tailInsert(list,7);
tailInsert(list,8);
delete(list,0);
delete(list,1);
delete(list,4);
delete(list,8);
printList(list);
printf("链表共有%d个节点",list->data);
return 0;
}