题解 | #链表中环的入口结点#
链表中环的入口结点
http://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
链表中环的入口结点
描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。
输入描述:
输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台将这2个会组装成一个有环或者无环单链表
##返回值描述:
返回链表的环的入口结点即可。而我们后台程序会打印这个节点
思路
使用快慢指针判断是否有环,快慢指针相遇则证明有环。有环以后从头开始创建一个新指针,和慢指针一起走,相遇的位置即入口位置。
public ListNode EntryNodeOfLoop(ListNode pHead) {
//快慢指针
ListNode fastNode = pHead;
ListNode slowNode = pHead;
ListNode inNode = null;
while (slowNode.next != null) {
fastNode = fastNode.next.next;
slowNode = slowNode.next;
if (fastNode == slowNode) {
inNode = pHead;
//有环
while (true) {
if (inNode == slowNode) {
//入口
break;
}
inNode = inNode.next;
slowNode = slowNode.next;
}
break;
}
}
return inNode;
}
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
凡岛公司福利 278人发布