55 链表中环的入口结点

Posted shareidea94

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了55 链表中环的入口结点相关的知识,希望对你有一定的参考价值。

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

思路一: Floyd环判定算法

使用fastptr和sloeptr两个速度不相同的指针,一旦它们两个进入链表中的环,就肯定会相遇

时间复杂度O(n)

空间复杂度O(1)

错误代码:没有看清楚题目啊?不是让你判断链表是否有环,而是要让你找到环的入口节点啊

 

 1 public class Solution 
 2     public ListNode EntryNodeOfLoop(ListNode pHead)
 3         //考虑特殊情况
 4         if(pHead == null || pHead.next==null|| pHead.next.next==null) return null;
 5         //定义两个pointer
 6         ListNode fastptr = pHead;//快指针走两步
 7         ListNode slowptr = pHead;//慢指针走一步
 8         while( fastptr.next.next!=null && slowptr.next!=null)
 9             fastptr = fastptr.next.next;
10             slowptr = slowptr.next;
11             if(fastptr == slowptr) return fastptr;
12         
13         return null;
14     
15 

 

正确代码: 

25行的break语句,一定要放进if的中去,否则无法通过

 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     public ListNode EntryNodeOfLoop(ListNode pHead)
13         //考虑特殊情况
14         if(pHead == null || pHead.next==null|| pHead.next.next==null) return null;
15         //定义两个pointer,和环是否存在的真假
16         ListNode fastptr = pHead;//快指针走两步
17         ListNode slowptr = pHead;//慢指针走一步
18         boolean isExist = false;
19         //判断环是否存在
20         while( fastptr.next.next!=null && slowptr.next!=null)
21             fastptr = fastptr.next.next;
22             slowptr = slowptr.next;
23             if(fastptr == slowptr)
24                 isExist = true;
25                 break;
26             
27         
28         if(isExist == true)//环存在,找到环的入口节点
29             slowptr = pHead; //只初始化其中一个指针,另外一个指针不动
30             while(slowptr!= fastptr)
31                 fastptr = fastptr.next; //每个指针各走一步
32                 slowptr = slowptr.next; //每个指针各走一步
33             
34             return slowptr;
35         
36         return null; //环不存在,返回null
37     
38 

 

以上是关于55 链表中环的入口结点的主要内容,如果未能解决你的问题,请参考以下文章

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

55 链表中环的入口结点

55.链表中环的入口结点(python)

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

剑指offer55:链表中环的入口结点

剑指Offer55:链表中环的入口结点(Java)