• 周练(4)142. 环形链表II


    142. 环形链表 II

    给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

    为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

    说明:不允许修改给定的链表。

    示例 1:

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

    示例 2:

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

    示例 3:

    输入:head = [1], pos = -1
    输出:no cycle
    解释:链表中没有环。

    C++版本:

    /*
     * @lc app=leetcode.cn id=142 lang=cpp
     *
     * [142] 环形链表 II
     */
    
    // @lc code=start
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode *detectCycle(ListNode *head) {
            if (head == nullptr || head->next == nullptr)
            {
                return nullptr;
            }
    
            ListNode *fast = head, *slow = head;
            while (true)
            {
                if (!(fast && fast->next)) {
                    return nullptr;
                }
                slow = slow->next; 
                fast = fast->next->next;
                if (slow == fast) {
                    break;
                }
            }
    
            fast = head;
            while (fast != slow)
            {
                fast = fast->next;
                slow = slow->next;
            }
            return fast;
            
        }
    };
    // @lc code=end
    

    python版本

    #
    # @lc app=leetcode.cn id=142 lang=python3
    #
    # [142] 环形链表 II
    #
    
    # @lc code=start
    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
        def detectCycle(self, head: ListNode) -> ListNode:
            if head == None or head.next == None:
                return None
    
            fast, slow = head, head
            while True:
                if not (fast and fast.next):
                    return None
                slow, fast = slow.next, fast.next.next
                if slow == fast:
                    break
            
            fast = head
            while fast != slow:
                slow, fast = slow.next, fast.next
    
            return fast
            
    # @lc code=end
    
    
  • 相关阅读:
    一个万能的工具包下载网站
    Keras框架简介
    发现了一个非常棒的pyqt5的例子集
    人脸识别常用数据集大全(12/20更新)
    用 opencv和numpy进行图片和字符串互转,并保存至 json
    机器学习中的范数规则化-L0,L1和L2范式(转载)
    利用face_recognition库裁取人脸
    一招解决C盘空间不足,再也不怕硬盘爆满!
    【LeetCode】394.字符串解码(辅助栈、递归、详细图解)
    程序员那些事儿:女婿程序员
  • 原文地址:https://www.cnblogs.com/douzujun/p/13703827.html
Copyright © 2020-2023  润新知