题解 | #链表中环的入口结点#
链表中环的入口结点
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
import java.util.ArrayList;
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
ArrayList list = new ArrayList();
ListNode node = null;
list.add(node);
for (int j = 0; j < list.size(); j++) {
for (int i = 0; i < j; i++) {
if (pHead == list.get(i)) {
return pHead;
}
}
list.add(pHead);
pHead = pHead.next;
if (pHead == null) {
return null;
}
}
return new ListNode(-1);
}
}
两个for循环,如果phead为null则返回null,说明链表没有环。
当i第二次到值为3的节点时说明已经走过一个循环,j每次从0开始遍历到小于i的位置,当遍历到第一次的值为3的节点时将phead的地址与其比较,一样则说明有环,返回phead。
因为必须有返回值所以我写了 return new ListNode(-1);同时方便定位bug。刚开始学算法,有什么错误希望指正。
查看14道真题和解析