用c语言实现对带有头节点和不带头结点的单链表进行建立、插入和删除的操作
#include#include typedef struct lnode{ int data; struct lnode *next; }Lnode,*linklist; main(){ linklist L1,L2,p,q; int e,i,j,e1,e2; L1=(linklist)malloc(sizeof(Lnode)); L1->next=NULL;//建立带有头结点的空链表 L2=NULL;//建立不带头结点的空链表 p=L1;//给带头节点的单链表赋5个初始元素数据 for(i=0;i<5;i++){ q=(linklist)malloc(sizeof(Lnode)); q->data=i+1; q->next=NULL; p->next=q; p=p->next; } i=1; e=10;//在带有头结点的单链表的第i个位置插入一个为e的新节点 p=L1; j=0; while(p&&j next;j++;}//找到第i-1个节点 if(p!=NULL&&j>i-1)printf("ERROR!"); q=(linklist)malloc(sizeof(Lnode)); q->data=e; q->next=p->next; p->next=q; printf("L1:");//输出进行插入操作后的单链表L1 p=L1->next; while(p){printf("%d,",p->data);p=p->next;} q=(linklist)malloc(sizeof(Lnode));//给不带头节点的单链表赋5个初始元素数据 q->data=1; q->next=NULL; L2=q; p=L2; for(i=1;i<5;i++){ q=(linklist)malloc(sizeof(Lnode)); q->data=i+1; q->next=NULL; p->next=q; p=p->next;} i=1; e=10; if(i==1) { q=(linklist)malloc(sizeof(Lnode)); q->data=e; q->next=L2; L2=q; }//在不带头结点的单链表的第一个位置的插入 else { j=1; p=L2; while(p&&j next;j++;} if(p!=NULL&&j>i-1)printf("ERROR!"); q=(linklist)malloc(sizeof(Lnode)); q->data=e; q->next=p->next; p->next=q; }//在不带头结点的单链表的其他位置的插入 printf("nL2:");//输出进行插入操作后的单链表L2 p=L2; while(p){printf("%d,",p->data);p=p->next;} printf("n"); i=1;//删除带头结点的单链表的第i个结点 j=0; p=L1; while(p->next&&j next;++j;}//寻找第i-1个结点 if(!(p->next)||j>i-1) printf("ERROR!n"); q=p->next; p->next=q->next; e1=q->data; free(q); printf("ndeleted: e1=%dn",e1);//输出进行删除操作后的单链表L1,并返回删除的元素e1的值 printf("L1'="); p=L1->next; while(p){printf("%d,",p->data);p=p->next;} i=2; if(i==1){ q=L2; e2=q->data; L2=L2->next; free(q);}//删除不带头结点的单链表的第1个结点 else { p=L2; j=1; while(p->next&&j next;++j;} if(!(p->next)||j>i-1) printf("ERROR!n"); q=p->next; p->next=q->next; e2=q->data; free(q);}//删除不带头结点的单链表的其他结点 printf("ndeleted: e2=%d",e2);//输出进行删除操作后的单链表L2,并返回删除的元素e2的值 printf("nL2':"); p=L2; while(p){printf("%d,",p->data);p=p->next;} printf("n"); }



