题解 | 链表中环的入口结点
import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { ListNode tmp = new ListNode(0); ListNode slow = pHead; int i = 0; ListNode quick = pHead; int j = 0; if (slow == null || slow.next == null || slow.next.next == null){ return null; } while(quick.next.next != slow.next){ if (slow.next == null || quick.next==null || quick.next.next == null){ return null; } slow = slow.next; quick = quick.next.next; } while(pHead.next != null){ tmp.next = pHead; pHead = pHead.next; tmp.next.next = null; } return pHead; } }
我的思路很简单,一开始就想到怎么获得节点,但是没想到如何判断有没有环。粗略了看了题解用快慢指针,就自己想了一下快慢指针怎么做,在草稿上用示例画了一下发现快慢指针的差值-1为环的大小,但是得到环的长度我仍然无法判断结点第一个结点位置。但是我想到至少可以用快慢指针来判断有没有环,没有输出null,有就按我之前的办法输出结点就好了,果然成功了。
另外双指针我直接想数学解释一下子没想通,还是对着例子画了几圈才发现规律。遇到问题时还是直接画个图会更直观一些