测试代码笔记如下:
#include<stdio.h> #include<stdlib.h> typedef struct node { int data;//数据 struct node*pre;//前驱 struct node*next;//后继 }NODE,*PNODE; //申请一个结点 PNODE creatNode(int data)//要修改内容 传地址 { PNODE p = (NODE*)malloc(sizeof(NODE)); p->data = data; p->pre = NULL; p->next = NULL; return p; } void insert(PNODE head, int data) { PNODE p = creatNode(data); //插入的位置 //头插 head->A->B 插入C p->next = head->next;//保留后面的结点C->next=B //这一步必须最先写 //后面三步可以换位置 if (p->next!=NULL) p->next->pre = p;//让B->pre=C head->next = p;//A->next=C p->pre = head;//C->pre=A //中间插入 } void deleNode(PNODE head, int data) { PNODE p = head->next;//第一个节点不存数据 while (p != NULL) { if (p->data == data) { //找到位置 p->pre->next = p->next; if(p->next!=NULL) p->next->pre = p->pre; free(p); break;//p已经释放 所以p不能再用于循环 } p = p->next; } } void deleAllNode(PNODE head) { PNODE p = head; while (head)//判断head不等于NULL { p = head; head = head->next; free(p);//释放结点 } } int main() { PNODE head; head = creatNode(0);//初始化 //循环插入节点 //删除节点) getchar(); return 0; }
附: