欢迎来到天天文库
浏览记录
ID:12051806
大小:35.50 KB
页数:5页
时间:2018-07-15
《链表的建立和删除,逆序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include#includestructnode{intval;structnode*next;};//创建一个链表structnode*creat(structnode*head){intnum,i,x;structnode*tail,*p;head=tail=p=NULL;scanf("%d",&num);//输入链表的长度tail=p;for(i=0;i2、rintf("mallocdefult");exit(1);}p->val=x;p->next=NULL;if(head==NULL){head=p;tail=head;//必须有,否则报错}else{tail->next=p;returnhead;}}}创建一个链表typedefstructnode{datatypedata;structnode*next;}linklist;头插法建立链表linklist*creatlish(){linklist*l,*head,*s;charch;l=(linklist*)malloc(sizeof(linklist));head=l;l->next=N3、ULLch=getchar();while(ch!='#'){s=(linklist*)malloc(sizeof(linklist));s->data=ch;s->next=l->next;l->next=s;ch=getchar();returnhead;}尾插法建立链表linklist*creatlistr(){linklist*l,*s,*r;charch;l=(linklist*)malloc(sizeof(linklist));l->next=NULL;r=l;ch=getchar();while(ch!='#'){s=(linklist*)malloc(sizeof(linkli4、st));s->data=ch;s-next=NULL;r-next=s;r=s;ch=getchar();}returnl;}//遍历链表并输出voidprintflist(structnode*head){while(head){printf("%d",head->val);head=head->next;}}//输出链表长度intcountlist(structnode*head){intcount=0;while(head){count++;head=head->next;}returncount;}//插入一个数,使原链表依然有序structnode*insert(structnod5、e*head,intnum){structnode*p,*q,*r;p=(structnode*)malloc(sizeof(structnode));p->next=NULL;//为什么p=NULL不行?p->val=num;if(numval){p->next=head;head=p;returnhead;}for(q=r=head;q->next!=NULL;q=q->next){if(numval){r->next=p;p->next=q;returnhead;}r=q;}q->next=p;returnhead;}//删除一个元素structnode*delet6、elist(structnode*head,intnum){structnode*p,*q,*r;if(head->val==num){p=head;head=head->next;free(p);returnhead;}//为什么是不对的for(q=head;q->next;q=q->next){r=q->next;if(num==r->val){q->next=r->next;free(r);break;}}q->next=NULL;returnhead;}//单链表的逆序structnode*inverse(structnode*head){structnode*middle,*tail7、,*lead;tail=middle=NULL;lead=head;while(lead){middle=lead;lead=lead->next;middle->next=tail;tail=middle;}returnmiddle;}intmain(){intx;structnode*head;head=creat(head);//head=insert(head,0);//head=inse
2、rintf("mallocdefult");exit(1);}p->val=x;p->next=NULL;if(head==NULL){head=p;tail=head;//必须有,否则报错}else{tail->next=p;returnhead;}}}创建一个链表typedefstructnode{datatypedata;structnode*next;}linklist;头插法建立链表linklist*creatlish(){linklist*l,*head,*s;charch;l=(linklist*)malloc(sizeof(linklist));head=l;l->next=N
3、ULLch=getchar();while(ch!='#'){s=(linklist*)malloc(sizeof(linklist));s->data=ch;s->next=l->next;l->next=s;ch=getchar();returnhead;}尾插法建立链表linklist*creatlistr(){linklist*l,*s,*r;charch;l=(linklist*)malloc(sizeof(linklist));l->next=NULL;r=l;ch=getchar();while(ch!='#'){s=(linklist*)malloc(sizeof(linkli
4、st));s->data=ch;s-next=NULL;r-next=s;r=s;ch=getchar();}returnl;}//遍历链表并输出voidprintflist(structnode*head){while(head){printf("%d",head->val);head=head->next;}}//输出链表长度intcountlist(structnode*head){intcount=0;while(head){count++;head=head->next;}returncount;}//插入一个数,使原链表依然有序structnode*insert(structnod
5、e*head,intnum){structnode*p,*q,*r;p=(structnode*)malloc(sizeof(structnode));p->next=NULL;//为什么p=NULL不行?p->val=num;if(numval){p->next=head;head=p;returnhead;}for(q=r=head;q->next!=NULL;q=q->next){if(numval){r->next=p;p->next=q;returnhead;}r=q;}q->next=p;returnhead;}//删除一个元素structnode*delet
6、elist(structnode*head,intnum){structnode*p,*q,*r;if(head->val==num){p=head;head=head->next;free(p);returnhead;}//为什么是不对的for(q=head;q->next;q=q->next){r=q->next;if(num==r->val){q->next=r->next;free(r);break;}}q->next=NULL;returnhead;}//单链表的逆序structnode*inverse(structnode*head){structnode*middle,*tail
7、,*lead;tail=middle=NULL;lead=head;while(lead){middle=lead;lead=lead->next;middle->next=tail;tail=middle;}returnmiddle;}intmain(){intx;structnode*head;head=creat(head);//head=insert(head,0);//head=inse
此文档下载收益归作者所有