首页 > 编程语言 > 详细

【算法】【链表】链表中环的入口结点

时间:2020-05-08 23:03:13      阅读:57      评论:0      收藏:0      [点我收藏+]

题目链接:https://www.acwing.com/problem/content/description/86/

双指针

快慢指针,快指针一次走两步,慢指针一次走一步,如果快指针无法继续前进,没有环;
否则,当快指针与慢指针第一次相遇以后,令快指针等于头结点,快慢指针各自每次走一步,再次相遇的点即为环的入口节点

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *entryNodeOfLoop(ListNode *head) {
        if(!head || !head -> next) return nullptr;
        ListNode* fast = head;
        ListNode* low = head;
        
        while(fast && low)
        {
            fast = fast -> next;
            low = low -> next;
            if(fast) fast = fast -> next;
            else return nullptr;
            
            if(fast == low)
            {
                fast = head;
                while(fast != low)
                {
                    fast = fast -> next;
                    low = low -> next;
                }
                return fast;
            }
        }
        return nullptr;
    }
};

【算法】【链表】链表中环的入口结点

原文:https://www.cnblogs.com/Trevo/p/12852885.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!