一、题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
二、解题思路
1、利用set
- 遍历链表,往set中添加节点
- 新的加入set
- set中已存在,输出。
2、双指针
- slow=fast=header
- slow+1,fast+2
- 不相遇,无环,相遇有环
- fast=head,fast+1,slow+1
public ListNode EntryNodeOfLoop(ListNode pHead){
if(pHead==null){
return null;
}
ListNode s=pHead;
ListNode f=pHead;
while(s!=null&&f!=null){
s=s.next;
if(f.next!=null){
f=f.next.next;
}
if(s==f){
break;
}
}
if(s==null||f==null){
return null;
}
f=pHead;
while(f!=s){
f=f.next;
s=s.next;
}
return f;
}