题解 | #链表中环的入口结点#
链表中环的入口结点
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。刚开始学算法,有什么错误希望指正。