题解 | #链表中环的入口结点#
链表中环的入口结点
http://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
因为题目中给出1<=结点值<=10000,我们设置一个节点temp,其val=-1。接着遍历一遍链表,将遍历过的节点的next指向temp。这样每次遍历的时候,先判断这个节点的next.val是否为-1,如果为-1则说明之前被访问过,则满足条件的第一个节点就是环的入口节点。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
if(pHead == null || pHead.next == pHead)
return pHead;
ListNode temp = new ListNode(-1);
ListNode nex = null;
// 如果pHead==null 说明链表不存在环
while(pHead != null){
// 说明存在环 并且当前节点为环的入口节点
if(pHead.next != null && pHead.next.val == -1)
return pHead;
nex = pHead.next;
pHead.next = temp;
pHead = nex;
}
// 没环
return null;
}
}