首页 > 其他分享 >142. 环形链表 II(中)

142. 环形链表 II(中)

时间:2024-01-28 11:36:09浏览次数:43  
标签:II head right 142 next 链表 left 指针

目录

题目

  • 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
    如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
    不允许修改 链表。

题解:双指针

  • 慢指针走一步,快指针走两步,若有环,当快指针追上慢指针时,让慢指针回到头,两指针一起走,相遇的点就是入环的第一个点
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
        left=head
        right = head
        if not head or not head.next:# 空链表或只有一个节点,肯定没有环
            return None
        while right and right.next:
            left=left.next
            right=right.next.next
            if right==left:
                break
        if left!=right:# 快指针到达链表末尾,没有环
            return None
        left=head#让慢指针回到头
        while left!=right:#两指针一起走,相遇的点就是入环的第一个点
            left=left.next
            right=right.next
        return left

标签:II,head,right,142,next,链表,left,指针
From: https://www.cnblogs.com/lushuang55/p/17992632

相关文章

  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。题目链接:24.两两交换链表中的节点-力扣(LeetCode)建议画图,会更清晰一些。同时注意交换问题要用两个临时节点。class......
  • 虚拟机vmware安装ubuntu磁盘塞满启动爆ubuntu 开机报错 piix4_smbus : SMBus Host Con
    虚拟机vmware安装ubuntu磁盘塞满启动爆ubuntu开机报错piix4_smbus:SMBusHostControllernotenabled错误解决办法  一、vmware硬件增加磁盘空间该虚拟机名称右键[设置]-虚拟机设置-【硬盘(SCSI)】-磁盘实用工具-扩展磁盘容量-【扩展】-增大适当的容量。二、重启VMWA......
  • 代码随想录 day32 买卖股票的最佳时机 II 跳跃游戏 跳跃游戏 II
    买卖股票的最佳时机II代码非常简单但是想不到思路就比较难这里是这样的逻辑若在d4卖出d1买入获得收益那么实际可以拆解成d4-d3+d3-d2+d2-d1也就是d4-d1实际就是变成看明天减去今天收益是不是大于0就行亏钱就不要赚钱就要跳跃游戏一步步跟着跳就是看......
  • 82. 删除排序链表中的重复元素 II(中)
    目录题目题解:双指针题目给定一个已排序的链表的头head,删除原始链表中所有重复数字的节点,只留下不同的数字。返回已排序的链表。题解:双指针题目给的头节点是第一个元素,处理起来较麻烦(需单独处理头节点);加上习惯用一个空的头节点,所以本题新建了一个虚拟头节点,以便统一......
  • 洛谷 P1749 [入门赛 #19] 分饼干 II 题解
    题目传送门先给结论:记\(S=1+2+\dots+k\),则当\(N\geS\)时为YES,当\(N<S\)时为NO。严谨一点,证明如下:若能成功分配饼干,记\(k\)名小朋友拿到的饼干数量分别为\(a_1,a_2,\dots,a_k\)。由于饼干数量各不相同且均为整数,不妨设\(a_1<a_2<\dots<a_k\),则\(a_2\gea_1+1,a_3\g......
  • 链表算法
    目录链表算法初始化节点1.删除链表的第N个节点2.删除链表中倒数第N个节点3.分块反转链表(K个一组翻转链表)4.反转链表I5.反转链表II(给定区间反转)6.判断是否为环形链表7.两数相加(两个链表相同位置相加)8.合并两个有序链表9.删除排序链表中的重复元素II10.旋转链表(将链表每个节......
  • 80. 删除有序数组中的重复项 II(中)
    目录题目题解:双指针题目给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。说明:为什么返回数值是整数,但输......
  • 代码随想录算法训练营第三天| 203.移除链表元素,707.设计链表 ,206.反转链表
    203.移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。题目链接:203.移除链表元素-力扣(LeetCode)注意c++中NULL和nullptr的区别。应该用nullptr来表示空指针。/***Definitionforsingly......
  • 167. 两数之和 II - 输入有序数组(中)
    目录题目题解:双指针题目给你一个下标从1开始的整数数组numbers,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[index1]和numbers[index2],则1<=index1<index2<=numbers.length。以长度......
  • 安装QuartusII13
    安装QuartusII13.0一、下载quartus软件方法一:通过Altera公司[官网]https://www.intel.cn/content/www/cn/zh/products/details/fpga/development-tools/quartus-prime.html下载对应版本,但是当下只能没有13.0的旧版本了方法二:百度网盘[链接]:<链接:https://pan.baidu.com/s/1nLh......