LeetCode 142. 环形链表 II

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

题目


给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 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
解释:链表中没有环。



进阶: 你是否可以不用额外空间解决此题?

解题思路

class Solution:
    def detectCycle(self, head: ListNode) -> ListNode:
        # #存值做法
        # numsList = []
        # while head:
        #     if head in numsList:
        #         return head
        #     numsList.append(head)
        #     try:
        #         head = head.next
        #     except:
        #         return None
        # return None
        # 双指针双倍速度走向,当相遇的时候,慢指针再走n步,就走到链表循环入口,而n步也是从头部走到入口的部数
        left = right = head
        while right:
            try:
                left = left.next
                right = right.next.next
            except:
                return None
            if left == right:  # 相遇后,入口的也开始走了
                break
        right = head  # right指针回到表头重新走
        while left and right:
            if left == right:
                return left
            left = left.next
            right = right.next
        return None


目录
相关文章
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
151 1
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
178 0
Leetcode第21题(合并两个有序链表)
|
7月前
|
算法 Go
【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 23——合并 K 个升序链表的两种解法:优先队列(最小堆)和分治合并。题目要求将多个已排序链表合并为一个升序链表。最小堆方法通过维护节点优先级快速选择最小值,;分治合并则采用归并思想两两合并链表。文章提供了 Go 语言实现代码,并对比分析两种方法的适用场景,帮助读者深入理解链表操作与算法设计。
239 10
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
145 0
LeetCode第二十四题(两两交换链表中的节点)
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
180 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
253 0
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
101 0
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
187 0
【LeetCode 08】206 反转链表
【LeetCode 08】206 反转链表
79 0
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
109 0

热门文章

最新文章