leetcode 【 Linked List Cycle II 】 python 实现

公司和学校事情比较多,隔了好几天没刷题,今天继续刷起来

题目

Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

Follow up:
Can you solve it without using extra space?

 

代码:oj 测试通过 Runtime: 596 ms

复制代码
 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution:
 8     # @param head, a ListNode
 9     # @return a list node
10     def detectCycle(self, head):
11         if head is None or head.next is None:
12             return None
13 
14         dummyhead = ListNode(0)
15         dummyhead.next = head
16         
17         p1 = ListNode(0)
18         p1.next = head
19         p2 = ListNode(0)
20         p2.next = head
21         
22         
23         first_meet = None
24         while p1 is not None and p2 is not None:
25             if p1 == p2:
26                 first_meet = p1
27                 break
28             else:
29                 p1 = p1.next
30                 p2 = p2.next
31                 if p2 is not None:
32                     p2 = p2.next
33         
34         result = None
35         if first_meet is None:
36             return None
37         else:
38             p2 = dummyhead
39             while p1 is not None and p2 is not None:
40                 if p1.next == p2.next:
41                     result = p1.next
42                     break
43                 else:
44                     p1 = p1.next
45                     p2 = p2.next
46         return result
47         
复制代码

 

思路

主要利用快慢指针的思想。

自己没太多思路,直接参考下面几篇靠谱的日志:

http://www.cnblogs.com/hiddenfox/p/3408931.html

http://blog.csdn.net/cs_guoxiaozhu/article/details/14209743

如果链表中没有循环自不必说;

如果有循环:

快慢指针第一次相遇之后,把一个指针重新指向head,然后两个指针相同速度往前走;

两个指针第二次相遇的位置就是循环开始的位置

Tips:

自己在实现的时候犯了一个错误,迭代p1 p2 找到二次相遇的位置 直接返回p1,这里迷糊了:应该迭代p1 p2判断p1.next与p2.next相等,再返回p1.next;这样返回的点才是原来链表中的,而不是构造出来的p1。

posted on   承续缘  阅读(308)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示