面试题 23:链表中环的入口节点
3 月,跳不动了?>>> 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路 书中解法 查询是否有环,设定两个指针,第一个慢指针每次走一步,第二个快指针每次走两步。当快指针超过慢指针时,即链表中有环。 查询环中的节点数,可从 1 中获得在环中的某个节点,通过这个节点循环遍历,可以回到此节点,由此计算节点数 nodesInLoop。 从链表头开始,设定两个指针,第一个指针先走环中节点数 nodesInLoop 次数,然后第二个指针与第一个指针开始同时遍历,每次走一步,到两指针相会时,所指向的节点即为入口节点。 其他解法 双指针法 https://leetcode-cn.com/problems/linked-list-cycle-ii/ 代码 书中解法 public class Solution { public ListNode detectCycle(ListNode head) { ListNode meetingNode = meetingNode(head); // 链表中无环,直接返回 null if (meetingNode == null) { return null; } // 得到环中节点的数目 int nodesInLoop = 1; ListNode pNode1 = meetingNode; while (pNode1