#include <stdio.h>
#include <stdlib.h>
typedef struct node{int value;struct node *next;
}LinkNode,*Linklist;/// 创建链表(链表长度,环节点起始位置)
Linklist createList(){Linklist head = NULL;LinkNode *preNode = head;LinkNode *FifthNode = NULL;for(int i=0;i<6;i++){LinkNode *tt = (LinkNode*)malloc(sizeof(LinkNode));tt->value = i;tt->next = NULL;if(preNode == NULL){head = tt;preNode = head;}else{preNode->next =tt;preNode = tt;}if(i == 3)FifthNode = tt;}preNode->next = FifthNode;return head;
}///判断链表是否有环
LinkNode* judgeRing(Linklist list){LinkNode *fast = list;LinkNode *slow = list;if(list == NULL)return NULL;while(true){if(slow->next != NULL && fast->next != NULL && fast->next->next != NULL){slow = slow->next;fast = fast->next->next;}elsereturn NULL;if(fast == slow)return fast;}
}///获取链表环长
int getRingLength(LinkNode *meetNode){int RingLength=0;LinkNode *fast = meetNode;LinkNode *slow = meetNode;for(;;){fast = fast->next->next;slow = slow->next;RingLength++;if(fast == slow)break;}return RingLength;
}///获取链表头到环连接点的长度
int getLenA(Linklist list,LinkNode *meetNode){int lenA=0;LinkNode *fast = list;LinkNode *slow = meetNode;for(;;){fast = fast->next;slow = slow->next;lenA++;if(fast == slow)break;}return lenA;
}///释放空间
int freeMalloc(Linklist list){LinkNode *nextnode = NULL;while(list != NULL){nextnode = list->next;free(list);list = nextnode;}
}int main(){Linklist list = NULL;LinkNode *meetNode = NULL;int RingLength = 0;int LenA = 0;list = createList();meetNode = judgeRing(list);if(meetNode == NULL)printf("No Ring\n");else{printf("Have Ring\n");RingLength = getRingLength(meetNode);LenA = getLenA(list,meetNode);printf("RingLength:%d\n",RingLength);printf("LenA:%d\n",LenA);printf("listLength=%d\n",RingLength+LenA);freeMalloc(list);}return 0;
}

求有环单链表的链表长相关推荐

  1. 求有环单链表的环连接点位置

    第一次碰撞点Pos到连接点Join的距离=头指针到连接点Join的距离, 因此,分别从第一次碰撞点Pos.头指针head开始走,相遇的那个点就是连接点. 在环上相遇后,记录第一次相遇点为Pos,连接点 ...

  2. (不带头结点的)单链表增删查改,逆置单链表(两种方法),求两个单链表的第一个公共结点,合并两个单链表,单循环链表中判断第一个入环点,约瑟夫环

    补充了每个算法的基本思想,并且画了思路图,源代码都经过调试成功 1.SlistNode.c文件 (1) (不带头结点的)单链表增删查改 #include "SlistNode.h" ...

  3. 证明利用快慢指针寻找有环单链表中环的起点算法

    问题:给定一个有环单链表,找到链表中环的起点,也就是说,找到下图中的单链表中Join点: (本图来源于http://www.cnblogs.com/xudong-bupt/p/3667729.html ...

  4. 【数据结构与算法】判断两个无环单链表是否相交的算法

    带环单链表的故事 @不了解前尘往事的Reader,烦请阅读--<判断单链表是否有环的算法> 不过我们这里不考虑带环单链表,且无环单链表相交也只是相交一次,不穿过,这是一种不算复杂的情况吧. ...

  5. 【数据结构与算法】带环单链表查找环的入口算法

    带环单链表的故事 @不了解前尘往事的Reader,烦请阅读--<判断单链表是否有环的算法> 如何找带环单链表的环的入口 这里只说比较可行的算法吧. 思路一:HashSet第一个重复元素就是 ...

  6. 链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定

    链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定 链表基本操作实现 c语言版本, 该程序在visual c++ 6.0上调试通过! 本人写该程序完全是为学习交流之用,还望大家多多 ...

  7. 剑指Offer(10)有环链表 翻转链表

    剑指offer(10) 有环链表 反转链表 题目: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路: 快慢指针,当前一个指针和后一个指针相遇时,有环,提前结束则无. ...

  8. 七十、反转和合并链表、 链表有环的判断

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 最近在重新梳理学算法的知识,本文为链表常见操作复习的总结文章,会讲解 ...

  9. 数据结构-编程实现一个双链表的建立,双链表的打印,双链表的测长

    1:双链表的建立,打印,代码如下: // ConsoleApplication24.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #inc ...

最新文章

  1. POJ - 2387 Til the Cows Come Home
  2. 三、openstack安装之Glance篇
  3. java对象创建的流程到底是什么样子的?new一个对象是真的直接放在堆里吗?其实大有学问!
  4. Google C++单元测试框架GoogleTest---AdvancedGuide(译文)上
  5. 那些文献阅读能力爆表的科研学子,都在偷偷做这件事……
  6. Spring自学日志07(整合Mybatis)
  7. Cognos访问权限之让拒绝更友善
  8. Java多线程系列---“JUC原子类”06之 AtomicLongFieldUpdater原子类
  9. 织梦采集侠-dede织梦采集发布
  10. 联想电脑管家和驱动人生 驱动版本对比
  11. myeclipse 修改jsp模板
  12. oracle 多表去重sql语句,去重语句
  13. 企业网站建设需要从哪些方面入手
  14. NUCLEO L476RG学习笔记(六)定时器中断
  15. 计算上周一开始时间戳
  16. Django Views: Dynamic Content
  17. CSS的鼠标手势实现
  18. 什么是着色器/Threejs如何使用着色器/Threejs使用着色器实现平面网格的动态效果案例
  19. 大学物理:补充-角动量
  20. cd src make install make[1]: Entering directory `/home/xuweiliang/redis/r 错误解析

热门文章

  1. 异常宕机 Ora-00600 [Kccpb_sanity_check_2] 错误解决方法
  2. Android设备音频部分一些概念
  3. java B2B2C 源码多租户电子商城系统-Spring Cloud组件详解...
  4. 【C++】 外传篇 2_函数的异常规格说明
  5. 呼叫中心如何规划好工作习惯
  6. ubuntu下解决oracle sqlplus不能查看历史命令问题
  7. “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象
  8. 接口作为参数,不同的接口调用不同的方法,例如:输出“I love Game”或输出“我喜欢游戏”...
  9. 分享自制的C#和VB Code互转工具
  10. java sharepoint 2010,安装SharePoint2010出现“Could not find stored procedure ‘sp_dboption’.”的解决方法...