题解 | #链表中环的入口结点#
链表中环的入口结点
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
思路:双指针,主要是两个问题,一是判断是否有环,二是找到环的入口 对应的操作是:快慢指针如果相遇了,就是有环 在第一步是的基础上,让快指针回到链表头,此后快指针每次加1,如果再次相遇,就是入口处。 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ public class Solution { //判断是否有环 public ListNode hasCycle(ListNode pHead) { if (pHead == null) { return pHead; } ListNode fast = pHead; ListNode slow = pHead; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; if (fast == slow) { return slow; } } return null; } public ListNode EntryNodeOfLoop(ListNode pHead) { //快慢指相遇就说明链表是有环的 //判断好有环之后,让快指针回到头开始遍历单步,这时候相遇点就在入口处了,数理逻辑 ListNode slow = hasCycle(pHead); if (slow == null) { return null; } ListNode fast = pHead; while (fast != slow) { fast = fast.next; slow = slow.next; } return slow; } }
剑指offer刷题总结 文章被收录于专栏
本专栏是本人刷剑指offer的记录总结,也欢迎大家评论区留言讨论交流~