• 141. 环形链表 + 面试题 02.08. 环路检测 链表、双指针


    给定一个链表,判断链表中是否有环。

    如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

    如果链表中存在环,则返回 true 。 否则,返回 false 。

    进阶:

    你能用 O(1)(即,常量)内存解决此问题吗?

    示例 1:

    输入:head = [3,2,0,-4], pos = 1
    输出:true
    解释:链表中有一个环,其尾部连接到第二个节点。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/linked-list-cycle
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。
    有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。

    示例 1:

    输入:head = [3,2,0,-4], pos = 1
    输出:tail connects to node index 1
    解释:链表中有一个环,其尾部连接到第二个节点。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/linked-list-cycle-lcci
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    快慢指针,要理解的是,当快慢指针相遇时,快指针比慢指针多走了环长度的整数倍,而且快指针比慢指针多走的和慢指针走的一样,所以慢指针走的步数也是环长度的整数倍!此时让快指针再从头走,速度和慢指针一样,两指针肯定会在环入口相遇

    class Solution {
    public:
        bool hasCycle(ListNode *head) {
             ListNode* fast = head;
             ListNode* slow = head;
    
             while (fast && fast->next) {
                 fast = fast->next->next;
                 slow = slow->next;
                 if (slow == fast) {
                     return true;
                 }
             }
             return false;
        }
    };
    
    class Solution {
    public:
        ListNode *detectCycle(ListNode *head) {
            ListNode* fast = head;
            ListNode* slow = head;
    
            while (fast && fast->next) {
                slow = slow->next;
                fast = fast->next->next;
                if (slow == fast) {
                    while (slow != head) {
                        slow = slow->next;
                        head = head->next;
                    }
                    return slow;
                }
            }
    
            return nullptr;
        }
    };
    
  • 相关阅读:
    [HDU5184] Brackets
    L2-036 网红点打卡攻略 (25 分)
    L2-017 人以群分 (25 分)
    L2-029 特立独行的幸福 (25 分)
    L2-035 完全二叉树的层序遍历 (25 分)
    L2-031 深入虎穴 (25 分)
    L2-020 功夫传人 (25 分)
    第 50 场双周赛
    L2-027 名人堂与代金券 (25 分)
    L2-024 部落 (25 分)
  • 原文地址:https://www.cnblogs.com/xgbt/p/13783968.html
Copyright © 2020-2023  润新知