//链表操作:建立、插入、删除、查找、倒置、删除等基本操作//喜洋洋制作#includestdio.h#includestdlib.htypedefstructLNode{intdata;structLNode*next;}LNode,*Llist;LNode*creat_head();//创建一个空表voidcreat_list(LNode*,int);//创建一个长度为n的线性链表voidinsert_list(LNode*,int,int);//插入一个元素intdelete_list(LNode*,int);//删除一个元素intfound_list(LNode*,int);//链表查询voidreverse(LNode*);//倒置整个链表voiddelete_whole(LNode*);//删除整个链表voidprint_list(LNode*);//打印链表main(){LNode*head;intn,n2;intx,i;intb;chartemp1,temp2;head=creat_head();printf(请输入链表的节点个数n=);scanf(%d,&n);printf(\n请输入数据:\n);creat_list(head,n);//创建链表print_list(head);printf(\n*********************************************************\n);printf(\n下面进行链表插入元素\n);printf(\n请输入您需要插入的元素x=);scanf(%d,&x);printf(\n请输入即将插入的位置i=);scanf(%d,&i);insert_list(head,x,i);//插入元素print_list(head);printf(\n*********************************************************\n);printf(\n下面进行链表删除元素\n);printf(\n请输入即将删除元素的位置:i=);scanf(%d,&i);b=delete_list(head,i);//删除元素print_list(head);printf(\n\n成功删除元素:%d,b);printf(\n*********************************************************\n);printf(\n下面进行链表查询\n);printf(\n请输入即将查询的元素:x=);scanf(%d,&n2);if(found_list(head,n2)0)//链表查询printf(找到了,在第%d的位置上,found_list(head,n2));elseprintf(没有找到!);printf(\n*********************************************************\n);printf(\n是否倒置整个链表?Y/N\n);fflush(stdin);scanf(%c,&temp1);if('Y'==temp1)//倒置链表{reverse(head);print_list(head);}printf(\n*********************************************************\n);printf(\n是否删除整个链表?Y/N\n);fflush(stdin);scanf(%c,&temp2);if('Y'==temp2)//删除链表{delete_whole(head);printf(\n成功删除整个链表\n);}}//创建一个空链表LNode*creat_head(){LNode*p;p=(Llist)malloc(sizeof(LNode));if(NULL==p)printf(内存申请失败!);else{p-next=NULL;return(p);}}//创建一个长度为n的线性链表voidcreat_list(LNode*head,intn){LNode*p,*q;inti;p=head;for(i=1;i=n;i++){q=(Llist)malloc(sizeof(LNode));if(NULL==p)printf(内存申请失败!);else{printf(data:);scanf(%d,&q-data);q-next=NULL;p-next=q;p=q;}}}//插入一个元素voidinsert_list(LNode*head,intx,inti){intj=0;LNode*p,*s;p=head;while((p!=NULL)&&(ji-1)){p=p-next;j++;}if(p==NULL)exit(0);s=(Llist)malloc(sizeof(LNode));if(NULL==p)printf(内存申请失败!);else{s-data=x;s-next=p-next;p-next=s;}}//删除一个元素intdelete_list(LNode*head,inti){LNode*p,*q;intj=0;intx;p=head;while((p!=NULL)&&(ji-1)){p=p-next;j++;}if(p==NULL)exit(0);q=p-next;p-next=q-next;x=q-data;free(q);q=NULL;return(x);}//删除整个链表voiddelete_whole(LNode*head){LNode*p,*q;p=head;while(p!=NULL){q=p-next;free(p);p=q;}}//倒置链表voidreverse(LNode*head){LNode*p,*s,*t;p=head;s=p-next;while(s-next!=NULL)//主要置换过程{t=s-next;s-next=p;p=s;s=t;}s-next=p;head-next-next=NULL;//收尾head-next=s;//赋头}//打印链表voidprint_list(LNode*head){LNode*p;for(p=head-next;p!=NULL;){printf(%d,p-data);p=p-next;}}//链表查询intfound_list(LNode*head,intn){LNode*p;inti=1;for(p=head-next;p!=NULL;){if(n==p-data){returni;}i++;p=p-next;}if(NULL==p)return0;}