题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
解法:先采用快慢指针,一个走两步,一个走一步,假设走两步的指针先到达尾部,那么就是没有环,假设有环,两个指针必定会相遇,相遇之后,走两步的指针从头节点重新开始,两个指针都走一步,当两个指针再次相遇时,即为环的入口。
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
ListNode one = pHead;
ListNode two = pHead;
while (two.next != null) {
if (null != two.next.next) {
//走两步
two = two.next.next;
//走一步
one = one.next;
} else {
return null;
}
//第一个从相遇后
if (one == two) {
//走两步的指针从头结点重新开始
two = pHead;
//再次相遇,节点即为环的入口
while (one != two) {
one = one.next;
two = two.next;
}
return one;
}
}
return null;
}
}