zoukankan      html  css  js  c++  java
  • 链表中环的入口节点

    1、用快慢指针从头节点开始,快指针一次走两步,慢指针一次走一步,若有环,必然会相遇。

    2、将其中一个指针重置到头节点,另一个指针指向相遇节点,然后以相同速度走,再次相遇必然是环的入口节点

     

    当相遇时:

    然后将一个指针重置到头节点,另一个指针指向相遇节点,然后以相同速度走,再次相遇必然是环的入口节点:

    代码:

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
            val(x), next(NULL) {
        }
    };
    */
    class Solution {
    public:
        ListNode* EntryNodeOfLoop(ListNode* pHead)
        {
             ListNode* meetingNode = MeetingNodeOfLoop(pHead);
            if (meetingNode == nullptr)
                return nullptr;    //找到了链表中的环
    
            while (pHead != meetingNode){
                pHead = pHead->next;
                meetingNode = meetingNode->next;
            }
            return meetingNode;
        }
        
        //寻找环中相遇的节点
        ListNode* MeetingNodeOfLoop(ListNode* pHead)
        {
            if (pHead == nullptr || pHead->next == nullptr)
                return nullptr;
            ListNode *slow = pHead->next;
            ListNode *fast = slow->next;
    
            while (slow && fast)
            {
                if (slow == fast) 
                    return fast;
                else {
                    slow = slow->next;
                    fast = fast->next;
                    if (fast)
                        fast = fast->next;
                    else return nullptr;
                }
            }
            return nullptr;
        }
    };
  • 相关阅读:
    Day1-CSS-下拉菜单
    scau 1138 代码等式
    SCAU-1076 K尾相等数
    勾股数专题-SCAU-1079 三角形-18203 神奇的勾股数(原创)
    SCAU-1144 数星星-HDU-1166-树状数组的应用
    NodeJs Fs模块
    Node核心模块
    flutter环境配置
    纯CSS制作图形效果
    CSS3选择器
  • 原文地址:https://www.cnblogs.com/roscangjie/p/11106643.html
Copyright © 2011-2022 走看看