2025/2/27 【双指针】LeetCode 142.环形链表II
1.快慢指针法(来自代码随想录)
需要找规律,和数学式子的简单推理
# 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]): # 设定快慢指针 slow = fast = head # slow一次移动一个节点,fast一次移动两个节点 while fast and fast.next: slow = slow.next fast = fast.next.next # 如果有环,slow和fast一定在某一点相遇 if slow == fast: # 这时从其实节点出发的指针和从相遇点出发的指针一定将在环入口相遇 slow = head while slow != fast: slow = slow.next fast = fast.next return slow # 没有环 return None
2.集合方法
还是这种方法比较容易想到,利用集合中元素不重复的性质。
# 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]): visited = set() while head: if head in visited: return head visited.add(head) head = head.next return None
分类:
每日刷题记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架