双链表(头插法)
#include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *prior; struct node *next; }Node,*LinkList; //初始化(头插法) bool InitList(LinkList &L,int n){ L=(LinkList)malloc(sizeof(Node)); L->prior=NULL; L->next=NULL; int x; printf("请输入结点的值"); scanf("%d",&x); Node *p; p=(Node *)malloc(sizeof(Node)); p->data=x; L->next=p; p->prior=L; p->next=NULL; while(n-1>0){ printf("请输入结点的值"); scanf("%d",&x); if(x!=0){ p=(Node *)malloc(sizeof(Node)); p->data=x; p->next=L->next; L->next->prior=p; p->prior=L; L->next=p; } n--; } return true; } //删除结点 bool DelNode(LinkList &L,int i){ LinkList m=L; LinkList q; int j; for(j=0;j<i-1;j++){ m=m->next; } if(i==0){ L=L->next->next;//删除的是头结点 L->prior=NULL; } else { q=m->next; m->next=q->next; q->next->prior=m; free(q); } return true; } //遍历 bool travel(LinkList &L){ LinkList m; m=L->next; while(m){ printf("%d",m->data); m=m->next; } return true; } int main(){ LinkList L;int n; printf("输入要插入的结点的个数:"); scanf("%d",&n); InitList(L,n); DelNode(L,3); travel(L); return 0; }