• 周练(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
    
    
  • 相关阅读:
    【记中关村.西北食府.兰州拉面】诗一首
    【新发地寻柑桔收购商】 诗一首
    【糖葫芦】诗一首
    【板栗饼】诗一首
    【白云观寻道】诗一首
    Android开发常用网站汇总
    BZOJ 2281 消失之物
    BZOJ 2281 消失之物
    BZOJ 4033: [HAOI2015]树上染色
    BZOJ 4033: [HAOI2015]树上染色
  • 原文地址:https://www.cnblogs.com/douzujun/p/13703827.html
Copyright © 2020-2023  润新知