题目:
给一个链表,若其中包含环,请找出该链表的环的入口结点。
思路:
链表中环的入口节点
- 先确定有环,用快慢指针,记录多少步,快指针追上慢指针,步数即为环的长度
- 第一个指针先走环的长度,然后第一和第二个指针一起走,相遇点就是入口节点
代码:
public static ListNode inNode(ListNode node){
ListNode slowNode=null;
ListNode fastNode=null;
ListNode frontNode=node;
ListNode postNode=node;
if (node.next!=null){
slowNode=node.next;
}else {
return null;
}
if (slowNode.next!=null){
fastNode=slowNode.next;
}else {
return null;
}
int count=1;
while (fastNode!=slowNode){
if (fastNode.next==null){
return null;
}else {
fastNode = fastNode.next.next;
slowNode=slowNode.next;
count++;
}
}
for (int i = 0; i < count; i++) {
frontNode=frontNode.next;
}
while (frontNode!=postNode){
frontNode=frontNode.next;
postNode=postNode.next;
}
return frontNode;
}