当前位置: 首页 > article >正文

快慢指针问题

文章目录

  • 题目速览
  • 题目详解
    • 876.链表的中间结点
    • 141.环形链表
    • 142.环形链表II

题目速览

参照灵神的教学视频

876.链表的中间结点
141.环形链表
142.环形链表II

题目详解

876.链表的中间结点

在这里插入图片描述

这题用快慢指针的话,就显得十分巧妙:当快指针指向最后一个节点或者指向为空,那么此时的慢指针指向的节点就是中间结点

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]:
        slow,fast = head,head
        while fast and fast.next :
            slow = slow.next
            fast = fast.next.next
        return slow
        

141.环形链表

在这里插入图片描述

题目解析:题目就是判断链表中是否存在环
这里我们使用 快慢指针 进行运算,所谓的快慢指针就是:开始的时候快指针和慢指针都指向头结点,然后 后续的话 慢指针每次移动一步,但是快指针每次可以移动两步,在链表中,如果出现环的话,快指针就会遇到慢指针

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def hasCycle(self, head: Optional[ListNode]) -> bool:
        slow,fast = head,head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
            if fast is slow:
                return True
        return False

142.环形链表II

在这里插入图片描述

在这里插入图片描述

# 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]:
        slow,fast = head,head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
            # 判断是否相遇
            if fast is slow:
                # 相遇之后 让 head 和 slow 都开始运动
                while slow is not head:
                    slow = slow.next
                    head = head.next
                return slow #相遇的地方就是入口
        return None


        


http://www.kler.cn/a/507917.html

相关文章:

  • Git在码云上的使用指南:从安装到推送远程仓库
  • vue2配置跨域后请求的是本机
  • 如何使用Ultralytics训练自己的yolo5 yolo8 yolo10 yolo11等目标检测模型
  • 学习threejs,使用OrbitControls相机控制器
  • Java并发编程——线程池(基础,使用,拒绝策略,命名,提交方式,状态)
  • 【C语言】_字符串拷贝函数strcpy
  • 【2024年华为OD机试】(B卷,100分)- 比赛 (Java JS PythonC/C++)
  • 隧道IP广播与紧急电话系统:提升隧道安全的关键技术
  • CanTp 笔记
  • 【微信小程序】5|我的页面 | 我的咖啡店-综合实训
  • 【PowerQuery专栏】PowerQuery 函数之CSV文件处理函数
  • 手机上做笔记的APP工具?有哪些好用的记笔记APP
  • 警惕IDEA 2024版重大Bug问题:LomBok失效、Gradle冲突、Spring Boot启动错误
  • 【Azure 架构师学习笔记】- Azure Function (2) --实操1
  • JVM直击重点
  • 在 Azure 100 学生订阅中新建 Ubuntu VPS 并通过 Docker 部署 pSQL 服务器
  • 加菲工具格式化XML:让数据呈现更清晰
  • Python 文字生成语言,保存为wav格式
  • SQL2000在win10上安装的方法
  • go语言zero框架中在线截图chromedp 设置超限的网页长度
  • 基于matlab的火焰高度求解
  • docker与部署微服务实战
  • Elasticsearch单机安装
  • 重新审视端到端传输协议:从观念到原则
  • Python 字符串分割时 spilt 和 re 效率对比
  • 2021年前端部署的灵魂拷问