码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-05-20 21:10:36      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:entry   nbsp   pre   bsp   证明   next   两个指针   eof   line   

题目链接:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出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——判断链表中是否有环

标签:entry   nbsp   pre   bsp   证明   next   两个指针   eof   line   

原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/10896275.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!