题解 | 链表中环的入口结点
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,有就按我之前的办法输出结点就好了,果然成功了。
另外双指针我直接想数学解释一下子没想通,还是对着例子画了几圈才发现规律。遇到问题时还是直接画个图会更直观一些
腾讯云智研发成长空间 5050人发布