环形链表c语言(找出一个带环单链表中是什么地方出现环的)

2024-07-23 13:24:20 5

环形链表c语言(找出一个带环单链表中是什么地方出现环的)

本文目录

找出一个带环单链表中是什么地方出现环的

请看以下的第1点和第2点:1.判断链表是否有环设置两个指针slow和fast,初始值均指向链表头,slow每次向前走一步,而fast每次向前走两步.如果链表有环,则fast先进入环里,而slow后进入环里,两个指针在环中必定相遇.如果slow与fast没有相遇,fast遍历到链表的尾部,则表示链表没有环.2.链表有环,确定环的入口点设置slow指针指向链表头,fast指向相遇点,每次两个指针都是只走一步,两个指针必定相遇,则相遇第一点为环入口点.( 为什么 两个指针相遇的地方就是环入口点?  先从"判断链表是否有环"的那种情况说起.  假设从链表头到环入口点的距离是x, 在环里两个指针相遇的那点与环入口点的距离是w,  fast指针在环里走了n圈才与slow相遇,环的长度是L,那么,  slow指针在相遇时走过的距离是 x + w  fast指针走过的距离是 x + w + n*L  因为slow每次向前走一步,而fast每次向前走两步,有如下等式:  2 * (x + w) = x + w + n*L  化简得到: x + w = n*L  也就是 x = n*L - w    假设相遇的时候,fast在环内只走了一圈,n=1,代入,得到 x = L - w  现在,slow从链表头开始走,fast继续从相遇点开始走,两个指针都只走一步,  那么,slow走了x,而fast走了(L - w),必定相遇,而且刚好在环入口点.  假设相遇的时候,fast在环内走了超过一圈,那么可以写为:  x = (n-1)*L + (L- w)  那么,slow走了x,而fast走了(n-1)圈后,再走(L - w),必定相遇,而且刚好在环入口点. )3.计算环长在环的入口点设置一个指针和一个计数器,让这个指针在环里面走,每走一步,计数器就加1,当这个指针回到环的入口点的时候,计数器的值就是环长.测试结果:链表1:10 20 30 40 50 20 30 40 50 20 30 40 50 20 30 40 50 20 30 40 ......有环, 环入口点是: 20环长是: 4链表2:1 2 3 4 5链表没有环//C语言测试程序#include 《stdio.h》#include 《stdlib.h》typedef struct Node{    int data;    struct Node *next;}Node,*LinkList;//创建链表(有"环")LinkList CreateLinkWithLoop(){    LinkList head; //链表头    Node *newNode; //新结点    Node *ptr;     //指向当前结点    Node *pEntry;  //指向"环"的入口    newNode=(Node *)malloc(sizeof(Node));    newNode-》data=10;    newNode-》next=NULL;    head=newNode;       //设置链表头    ptr=newNode;    newNode=(Node *)malloc(sizeof(Node));    newNode-》data=20;    newNode-》next=NULL;    ptr-》next=newNode;    ptr=newNode;    pEntry=newNode;  //指向"环"的入口    newNode=(Node *)malloc(sizeof(Node));    newNode-》data=30;    newNode-》next=NULL;    ptr-》next=newNode;    ptr=newNode;    newNode=(Node *)malloc(sizeof(Node));    newNode-》data=40;    newNode-》next=NULL;    ptr-》next=newNode;    ptr=newNode;    newNode=(Node *)malloc(sizeof(Node));    newNode-》data=50;    newNode-》next=pEntry; //产生"环"    ptr-》next=newNode;    ptr=newNode;    return head;}//创建链表(没有"环")LinkList CreateLink(){    LinkList head; //链表头    Node *newNode; //新结点    Node *ptr;     //指向当前结点    int i;    newNode=(Node *)malloc(sizeof(Node));    newNode-》data=1;    newNode-》next=NULL;    head=newNode;       //设置链表头    ptr=newNode;    for(i=2;i《=5;i++)    {        newNode=(Node *)malloc(sizeof(Node));        newNode-》data=i;        newNode-》next=NULL;        ptr-》next=newNode;        ptr=newNode;    }    return head;}//打印链表void PrintLink(LinkList head){    LinkList ptr;    int nCount=0;    ptr=head;    while(ptr!=NULL)    {        printf("%d ",ptr-》data);        ptr=ptr-》next;        nCount++;        if(nCount》=20)        {            printf("......");            break;        }    }    printf("\n");}//判断链表是否有"环",确定"环"的入口点LinkList CheckLinkLoop(LinkList head){    LinkList fast;    LinkList slow;    int isLoop=0;    fast=head;    slow=head;    while(fast != NULL && fast-》next != NULL)    {        //fast每次走两步,slow每次走一步        //当两个指针相等时,表示链表有"环"        slow=slow-》next;        fast=fast-》next-》next;        if(fast == slow)        {            isLoop=1; //1=有环, 0=没有环            break;        }    }    if(isLoop==1) //有"环"时    {        //slow指向链表头,fast指向相遇点,两个指针每次都只走一步        //当两个指针第一次相等时,就是环入口点        slow=head;        while(slow != fast)        {            slow=slow-》next;            fast=fast-》next;        }        return slow;    }    else //没有"环"    {        return NULL;    }}//计算环长int GetLoopSize(LinkList entryNode){    LinkList ptr;    int nCount=0;    ptr=entryNode-》next;    nCount++;    while(ptr!=entryNode)    {        nCount++;        ptr=ptr-》next;    }    return nCount;}int main(){    LinkList head_1;    LinkList head_2;    LinkList ret_1;    LinkList ret_2;    int loopSize_1;    int loopSize_2;    head_1=CreateLinkWithLoop(); //创建链表(有"环")    printf("链表1:\n");    PrintLink(head_1); //打印链表    ret_1=CheckLinkLoop(head_1);    if(ret_1!=NULL)    {        printf("有环, 环入口点是: %d\n",ret_1-》data);        loopSize_1=GetLoopSize(ret_1);        printf("环长是: %d\n",loopSize_1);    }    else    {        printf("链表没有环\n");    }    head_2=CreateLink(); //创建链表(没有"环")    printf("\n链表2:\n");    PrintLink(head_2); //打印链表    ret_2=CheckLinkLoop(head_2);    if(ret_2 != NULL)    {        printf("有环, 环入口点是: %d\n",ret_2-》data);        loopSize_2=GetLoopSize(ret_2);        printf("环长是: %d\n",loopSize_2);    }    else    {        printf("链表没有环\n");    }    return 0;}

怎样用c语言实现一个环形缓存区!

定义个数组如a;用两个head tail 指针存入数据后tail++ 读取数据后head++ 为了循环利用此块空间 做以下处理:存跟读数据时指针处理 tail%10 head%10判断缓存空?tail == head+1判断缓存满?tail == head+9

用c语言输出一个整数n和一字符串,将字符串循环左移n个字符

使用带头结点的环形链表存储字符串,从链表头开始做N次L-》next=L-》next-》next;L=L-》next;此时记录N=L;并输出链表内容(注意跳过头结点,头结点无字符信息),直至L==N;

环形链表c语言(找出一个带环单链表中是什么地方出现环的)

本文编辑:admin

本文相关文章:


环形链表c语言(怎样用c语言实现一个环形缓存区!)

环形链表c语言(怎样用c语言实现一个环形缓存区!)

本文目录怎样用c语言实现一个环形缓存区!找出一个带环单链表中是什么地方出现环的用c语言输出一个整数n和一字符串,将字符串循环左移n个字符怎样用c语言实现一个环形缓存区!定义个数组如a;用两个head tail 指针存入数据后tail++

2024年6月3日 03:29

更多文章:


qq炫舞手游捏脸(qq炫舞手游的脸码容易吗)

qq炫舞手游捏脸(qq炫舞手游的脸码容易吗)

大家好,关于qq炫舞手游捏脸很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于qq炫舞手游的脸码容易吗的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录qq

2024年8月25日 15:40

中央电视台7套在线直播观看(怎么看中央7台在线直播)

中央电视台7套在线直播观看(怎么看中央7台在线直播)

大家好,关于中央电视台7套在线直播观看很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于怎么看中央7台在线直播的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文

2024年6月19日 09:55

bt下载器安卓(安卓手机bt下载软件哪个好用)

bt下载器安卓(安卓手机bt下载软件哪个好用)

这篇文章给大家聊聊关于bt下载器安卓,以及安卓手机bt下载软件哪个好用对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录安卓手机bt下载软件哪个好用安卓上有什么好用的bt下载工具⊙_⊙BT下载是什么那里有怎么使用安卓手机bt下载

2024年5月17日 22:45

邢台银行的客服电话号码是多少?邢台银行夏季营业时间

邢台银行的客服电话号码是多少?邢台银行夏季营业时间

本文目录邢台银行的客服电话号码是多少邢台银行夏季营业时间邢台银行24小时客服电话是什么邢台银行人工服务电话收取费用吗邢台银行客服电话邢台银行存定期后怕邢台银行怎么查开户行邢台银行有没有信用卡邢台银行的客服电话号码是多少邢台银行的客服电话号码

2024年6月26日 22:28

拍拍助理可以批量替换描述里的首部内容么?拍拍助理显示本地图片不存在是什么意思

拍拍助理可以批量替换描述里的首部内容么?拍拍助理显示本地图片不存在是什么意思

本文目录拍拍助理可以批量替换描述里的首部内容么拍拍助理显示本地图片不存在是什么意思拍拍助理上传衣服的时候怎么显示商品属性不完整,请高手指点拍拍助理可以批量替换描述里的首部内容么你好,如果你的多个商品描述的首部内容是一样的话是可以替换的,先勾

2024年6月24日 07:41

adobe air是干什么的(Adobe AIR怎么使用)

adobe air是干什么的(Adobe AIR怎么使用)

其实adobe air是干什么的的问题并不复杂,但是又很多的朋友都不太了解Adobe AIR怎么使用,因此呢,今天小编就来为大家分享adobe air是干什么的的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录Ad

2024年7月21日 06:07

什么是网婚?为什么会有人会跟虚拟的人物结婚

什么是网婚?为什么会有人会跟虚拟的人物结婚

本文目录什么是网婚为什么会有人会跟虚拟的人物结婚关于网络虚拟结婚网婚是什么记者调查网络游戏虚拟结婚骗局,你如何看待游戏中虚拟结婚,怎么看女友虚拟世界结婚,我算什么,我该怎么办什么是网婚是基于互联网上的网络虚拟婚姻,网婚也可以理解为网络婚礼。

2024年2月21日 04:20

同城二手闲置物品交易平台(有哪些专卖二手货的APP)

同城二手闲置物品交易平台(有哪些专卖二手货的APP)

各位老铁们,大家好,今天由我来为大家分享同城二手闲置物品交易平台,以及有哪些专卖二手货的APP的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录有哪些

2024年9月4日 18:50

极品飞车21(《极品飞车21》有哪些值得一玩的车)

极品飞车21(《极品飞车21》有哪些值得一玩的车)

大家好,今天小编来为大家解答以下的问题,关于极品飞车21,《极品飞车21》有哪些值得一玩的车这个很多人还不知道,现在让我们一起来看看吧!本文目录《极品飞车21》有哪些值得一玩的车极品飞车21豪华版和标准版区别极品飞车21rm任务怎么接极品飞

2024年6月30日 03:48

可以下载电子书的软件(电子书软件哪个好)

可以下载电子书的软件(电子书软件哪个好)

其实可以下载电子书的软件的问题并不复杂,但是又很多的朋友都不太了解电子书软件哪个好,因此呢,今天小编就来为大家分享可以下载电子书的软件的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录电子书软件哪个好电子书软件哪个

2024年8月10日 09:55

淘宝怎么开店(在淘宝上如何开店)

淘宝怎么开店(在淘宝上如何开店)

其实淘宝怎么开店的问题并不复杂,但是又很多的朋友都不太了解在淘宝上如何开店,因此呢,今天小编就来为大家分享淘宝怎么开店的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录在淘宝上如何开店怎么在淘宝上开店淘宝怎么开店教

2024年7月24日 23:15

电脑数字五笔输入法免费版(求一个数字五笔输入法WIN7可以用的)

电脑数字五笔输入法免费版(求一个数字五笔输入法WIN7可以用的)

其实电脑数字五笔输入法免费版的问题并不复杂,但是又很多的朋友都不太了解求一个数字五笔输入法WIN7可以用的,因此呢,今天小编就来为大家分享电脑数字五笔输入法免费版的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录求

2024年4月13日 05:25

我删除了一个恶意软件叫盛大下载器但是它又会自动安装请问如何彻底删除它?电脑里有“盛大网络下载器”,我想删了它删除时说“无法删除文件:访问被拒绝” 该怎么办呢

我删除了一个恶意软件叫盛大下载器但是它又会自动安装请问如何彻底删除它?电脑里有“盛大网络下载器”,我想删了它删除时说“无法删除文件:访问被拒绝” 该怎么办呢

本文目录我删除了一个恶意软件叫盛大下载器但是它又会自动安装请问如何彻底删除它电脑里有“盛大网络下载器”,我想删了它删除时说“无法删除文件:访问被拒绝” 该怎么办呢跪求彻底删除 盛大下载器 此款流氓软件的方法!看清,是彻底!就是我打开盛大下载

2024年7月3日 10:32

土方计算软件(土方计算方式)

土方计算软件(土方计算方式)

各位老铁们好,相信很多人对土方计算软件都不是特别的了解,因此呢,今天就来为大家分享下关于土方计算软件以及土方计算方式的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录土方计算方式公路计量软件都有哪些工程量计算软件排

2024年5月18日 03:27

新世界OL攻城技巧 新手必备 详解怎么玩?世界OL星月冥腿破甲有多少

新世界OL攻城技巧 新手必备 详解怎么玩?世界OL星月冥腿破甲有多少

本文目录新世界OL攻城技巧 新手必备 详解怎么玩世界OL星月冥腿破甲有多少新世界OL攻城技巧 新手必备 详解怎么玩一、聊天系统这个只要是玩过游戏的应该都能明白,几乎手游的网游都有聊天系统,聊天系统的功能就是让你能够和其他玩家一起交流,世界O

2024年6月27日 06:00

别踩白块儿4下载(那是一款黑白格子的游戏,格子们向下降,只能踩黑,不能踩白格子,踩到白格子,游戏就结束了)

别踩白块儿4下载(那是一款黑白格子的游戏,格子们向下降,只能踩黑,不能踩白格子,踩到白格子,游戏就结束了)

本篇文章给大家谈谈别踩白块儿4下载,以及那是一款黑白格子的游戏,格子们向下降,只能踩黑,不能踩白格子,踩到白格子,游戏就结束了对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的

2024年9月29日 16:45

直播视频直播视频(怎么录制直播视频,虎牙直播视频怎么录制)

直播视频直播视频(怎么录制直播视频,虎牙直播视频怎么录制)

大家好,关于直播视频直播视频很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于怎么录制直播视频,虎牙直播视频怎么录制的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助

2024年5月21日 04:47

中国象棋(单机版)(中国象棋单机版什么地方可以下载)

中国象棋(单机版)(中国象棋单机版什么地方可以下载)

本篇文章给大家谈谈中国象棋(单机版),以及中国象棋单机版什么地方可以下载对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录中国象棋单机版什么地

2024年7月2日 20:29

迅捷cad看图(迅捷cad如何转换为pdf)

迅捷cad看图(迅捷cad如何转换为pdf)

大家好,迅捷cad看图相信很多的网友都不是很明白,包括迅捷cad如何转换为pdf也是一样,不过没有关系,接下来就来为大家分享关于迅捷cad看图和迅捷cad如何转换为pdf的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本

2024年6月28日 07:54

jetbrains(jetbrains是什么软件)

jetbrains(jetbrains是什么软件)

本篇文章给大家谈谈jetbrains,以及jetbrains是什么软件对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录jetbrains是什么软件jetbrains企业版怎么用jbr什么意思jetbrains是什么软件JetB

2024年7月15日 16:06

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1731
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1156
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1153
标签列表

热门搜索