基于单向链表做了一些修改,实现双向链表,记录一下
#include#include struct node{ int data; struct node* next; struct node* prev; }; struct node* creatlist() { struct node* headnode = (struct node*)malloc(sizeof(struct node)); headnode->next = NULL; headnode->prev = NULL; return headnode; } struct node* creatnode(int data) { struct node* newnode = (struct node*)malloc(sizeof(struct node)); newnode->next = NULL; newnode->prev = NULL; newnode->data = data; return newnode; } void insertnode(struct node* list,int data) { struct node* newnode = creatnode(data); struct node* head = list; if(head->next == NULL) { newnode->next = NULL; newnode->prev = head; head->next = newnode; }else{ newnode->next = head->next; newnode->prev = head; head->next->prev = newnode; head->next = newnode; } } void printlist(struct node* list) { struct node* pmove = list->next; if(!pmove) printf("链表为空n"); while(pmove != NULL) { printf("%d",pmove->data); pmove = pmove->next; } printf("n"); } void delnode(struct node* list, int data) { struct node* posnode = list->next; if(posnode == NULL) printf("链表为空n"); else { while(posnode->data != data) { posnode = posnode->next; if(posnode == NULL){ printf("找不到对应结点n"); return; } } if(posnode->next != NULL){ posnode->prev->next = posnode->next; posnode->next->prev = posnode->prev; free(posnode); } else { posnode->prev->next = NULL; } } } int main() { struct node *list; list = creatlist(); insertnode(list,6); insertnode(list,1); insertnode(list,3); insertnode(list,4); printlist(list); delnode(list,1); delnode(list,4); delnode(list,3); delnode(list,6); printlist(list); return 0; }
输出结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)