版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实现单链表逆置无头结点:1#include<stdio.h>2#include<stdlib.h>34typedefstructnode{5intdata;6structnode*next;7}Node;89//创建链表10Node*CreateList(void){11intval,i,n;12Node*head,*p,*q;1314head=NULL;15printf("请输入您要建立的链表长度:\n");16scanf("%d",&n);17printf("请输入您要输入的数据:\n");18for(i=0;i<n;i++){19scanf("%d",&val);20p=(Node*)malloc(sizeof(Node));21p->data=val;22if(head==NULL)23head=q=p;24else25q->next=p;26q=p;27}28p->next=NULL;29returnhead;30}3132//链表的逆置33Node*ReverseList(Node*head){34Node*p,*q,*r;35p=head;36q=r=NULL;37while(p){38q=p->next;39p->next=r;40r=p;41p=q;42}43returnr;44}4546//输出链表47voidShowList(Node*head){48Node*p;49p=head;50while(p){51printf("%d",p->data);52p=p->next;53}54printf("\n");55}5657voidmain(){58Node*head;5960head=CreateList();61printf("链表逆置前的数据:\n");62ShowList(head);6364head=ReverseList(head);65printf("链表逆置后的数据:\n");66ShowList(head);67}运行演示:2、判断单链表是否有环判断链表是否存在环的办法为:设置两个指针(fast,slow),初始值都指向头指针,slow每次前进一步,fast每次前进两步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行从头到尾部为NULL,则为无环链表)程序如下:1#include<stdio.h>2#include<stdlib.h>34typedefstructnode{5intelem;6structnode*next;7}Node,*NodeList;89boolIsExitsLoop(NodeListhead){10NodeListslow=head,fast=head;11while(fast&&fast->next){12slow=slow->next;13fast=fast->next->next;14if(slow==fast)15break;16}17return!(fast==NULL||fast->next==NULL);18}1920voidmain(){21//创建一个有环的单链表22NodeListhead=NULL,p,q;23for(inti=1;i<=5;i++){24p=(NodeList)malloc(sizeof(Node));25p->elem=i;26if(head==NULL)27head=q=p;28else29q->next=p;30q=p;31}32p=(NodeList)malloc(sizeof(Node));33p->elem=6;34q->next=p;35q=p;36q->next=head->next->next->next;37//判断单链表是否存在环38printf("单链表是否存在环:");39boolb=IsExitsLoop(head);40printf("%s\n",b==false?"false":"true");41}运行结果显示:3、如果单链表有环,则找到环的入口点当fast若与slow相遇时,slow肯定没有遍历完链表,而fast已经在环内循环了n圈(1<=n),假设slow走了s步,而fast走了2s步(fast步数还等于s加上在环上多转的n圈),设环长为r,则:2s=s+n*r;s=n*r;设整个链表长为L,入口环与相遇点距离为x,起点到环入口点的距离为a。a+x=n*r;a+x=(n-1)*r+r=(n-1)*r+L-a;a=(n-1)r+(L–a–x);(L–a–x)为相遇点到环入口点的距离,由此可知,从链表头到环入口点等于(n-1)循环内环+相遇点到环入口点,于是我们从链表头、与相遇点分别设一个指针,每次各走一步,两个指针必定相遇,且相遇第一点为环入口点。程序描述如下:1#include<stdio.h>2#include<stdlib.h>34typedefstructnode{5intelem;6structnode*next;7}Node,*NodeList;89//寻找环的入口点10NodeListFindLoopPort(NodeListhead){11NodeListslow=head,fast=head;12while(fast&&fast->next){13slow=slow->next;14fast=fast->next->next;15if(slow==fast)16break;17}18if(fast==NULL||fast->next==NULL)19returnNULL;20slow=head;21while(slow!=fast){22slow=slow->next;23fast=fast->next;24}25returnslow;26}2728voidmain(){29//创建一个有环的单链表30NodeListhead=NULL,p,q;31for(inti=1;i<=5;i++){32p=(NodeList)malloc(sizeof(Node));33p->elem=i;34if(head==NULL)35head=q=p;36else37q->next=p;38q=p;39}40p=(NodeList)malloc(sizeof(Node));41p->elem=6;42q->next=p;43q=p;44q->next=head->next->next->next;45//寻找环的入口点46NodeListlist=FindLoopPort(head);47printf("环的入口节点元素值为:%d\n",list->elem);48}运行结果显示:4、判断两个单链表是否相交,如果相交,给出相交的第一个点(两个链表都不存在环)比较好的方法有两个:一、将其中一个链表首尾相连,检测另外一个链表是否存在环,如果存在,则两个链表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院洁净设备巡检维护手册
- 输电线路塔基工程安全施工方案
- 污水检查井施工方案
- 人防通风设备安装施工方案
- 疏散指示牌安装施工方案
- 液位计系统使用风险评估报告
- 酸碱储存罐使用风险评估报告
- 职工疗养院规划设计方案
- 养老机构无障碍设施管理制度
- 住院部主任医疗安全年度考核方案
- 医疗质量安全十八项核心制度(国家卫健委版)
- 病案首页填写规范培训课件
- 河北省唐山市路北区2025-2026学年九年级上学期期中考试化学试卷(含答案)
- 2026苏教版二上数学第二单元第6课时《练习四》课件
- 【新教材】2026年秋人教版九年级上册英语:Units 1-8单元写作提升指导+练习题汇编(含答案+范文)
- 6.1 经济实力大幅跃升 (课件) 2026-2027学年统编版道德与法治 九年级上册
- 第5课《中国人民站起来了》第三课时(教学课件)
- 2026人教版四年级上语文全册1-27课一课一练
- 2026苏教版五年级数学上册第四单元第3课《除数是整数的小数除法》课件
- 幼儿园食品安全教育培训专题
- 2025届中国南方航空“明珠优才管培生”全球招聘30人笔试参考题库附带答案详解
评论
0/150
提交评论