剑指offer——判断链表中是否有环

Posted wangyufeiaichiyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer——判断链表中是否有环相关的知识,希望对你有一定的参考价值。

题目链接:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

 

解题思路:

//左神讲的
//先说个定理:两个指针一个fast、一个slow同时从一个链表的头部出发
//fast一次走2步,slow一次走一步,如果该链表有环,两个指针必然在环内相遇
//此时只需要把其中的一个指针重新指向链表头部,另一个不变(还在环内),
//这次两个指针一次走一步,相遇的地方就是入口节点。
//这个定理可以自己去网上看看证明。
 
 1 /*
 2  public class ListNode {
 3     int val;
 4     ListNode next = null;
 5 
 6     ListNode(int val) {
 7         this.val = val;
 8     }
 9 }
10 */
11 public class Solution {
12 
13     public ListNode EntryNodeOfLoop(ListNode pHead)
14     {
15         ListNode fast = pHead;
16         ListNode slow = pHead;
17         
18         while(fast!=null && fast.next!=null)
19         {
20             fast = fast.next.next;
21             slow =slow.next;
22             
23             if(fast ==slow)
24                 break;
25         }
26         
27         if(fast==null || fast.next==null)
28             return null;
29         fast = pHead;
30         
31         while(fast!=slow)
32         {
33             fast =fast.next;
34             slow = slow.next;
35         }
36         return fast;
37         
38     }
39 }

 

以上是关于剑指offer——判断链表中是否有环的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer(链表)-链表中包含环,找环的入口节点

双100%解法LeetCode 141 剑指Offer 23链表中环的入口节点

双100%解法LeetCode 141 剑指Offer 23链表中环的入口节点

剑指offer 链表中环的入口结点

剑指Offer对答如流系列 - 链表中环的入口节点

刷题记录-剑指offer22:链表中倒数第k个节点