判断单链表是否有环
来源:互联网 发布:java节假日 编辑:程序博客网 时间:2024/05/02 02:30
判断单链表是否有环?如何找到环的“起始”点?如何知道环的长度?
相关题目:
(1)找出单链表的倒数第 4个元素。找出单链表的中间元素。
相关题目:
(1)找出单链表的倒数第 4个元素。找出单链表的中间元素。
(2)判断两个单链表是否相交,若两个单链表相交,计算相交点。
解题思路:
(1)判断是否有环。采用快慢指针的思路,一个指针一次移动一个结点,另一个指针移动两个结
点。
如果有环,则进入环后,快指针肯定可以追赶上慢指针,这样就会出现两者相等的情况,从而得出
有环,但有一个前提,这个单链表必须有一个以上的结点在环之外才能判断出入口地址。
(2)怎么来找环的入口问题。
假定环外的长度为 l,相遇时环入口距离相遇处距离为 a,整个环为 x,则有下面的公式。
l + a = (l + a + nx )/2 即 l = nx – a。
这样,让快指针从这个位置开始继续移动,但步进为 1,慢指针从链表头开始移动,下次相遇的位
置就是环的入口地址。
(3)找环的长度。
现在已经知道环的入口位置,这样的话,采用快慢指针,再次相遇时快指针多移动的距离就是环的
长度。
/*说明:求环的入口地址*/int get_circle_local(Node *phead) { Node *fast = phead; Node *slow = phead; while(fast != NULL && fast->next != NULL) { fast = fast->next->next; slow = slow->next; if(fast == slow) { //slow指针指向链表头结点,fast指针仍在之前与slow相遇的地方slow = phead;while(slow!=fast) { //slow,fast都改为走一步slow = slow->next; fast = fast->next; } return slow->data;//data = local number } } return 0; }拓展知识
点击打开链接
判断两个链表是否相交:点击打开链接
0 0
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环?
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- QlikView任意改变图例的位置
- Java Annotations
- 语法分析
- 《计算机程序的构造与解释》(十一)
- JQuery中$.ajax()方法参数详解
- 判断单链表是否有环
- OCP 1Z0 052 124
- win7 IIS7 发布网站 出现 "处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误"
- Android中GestureDetector类及其用法(转自网上的笔记)
- ntoskrnl符号在IDA中查看的问题
- POJ3169-Layout
- 嵌入式 socket编程设置TTL
- Linux编程---时间相关
- 开启一段回忆