环形链表-力扣02
程序员文章站
2022-05-21 08:45:15
...
均来自于力扣
https://leetcode-cn.com/problems/linked-list-cycle/
上一篇的问题:
s.表示s是一个记录型数据,可以通过s.访问该记录变量的记录域内容。
s->;表示s是一个指针变量,可以通过s->;访问它指针域所指的下一个结点指针。
-
思考
(1)用next指针来找到某节点,此节点是属于环的某个节点
(2)用pos指针指向此节点的索引位置,倘若pos=-1时,则输出false ;pos!=-1,输出true
Class Solution:
def hasCycle(self, head: ListNode) -> bool:
#怎么通过next指针找到节点
#怎么用pos指针指向索引位置
-
思路:
(1)设fast指针,slow 指针,fast每移动一次走两个节点,slow每移动一次走一个结点
(2)如果这两个指针相遇,则一定会是在环内。(可以画图走一下)
class Solution:
def hasCycle(self, head):
if not head or not head.next: #节点不存在或下一个节点不存在
return False
slow = head
fast = head.next #起点错开,防止下面循环判断有问题
while fast and fast.next: #快节点和快节点下一个节点不为空
if slow == fast:
return True
slow = slow.next
fast = fast.next.next
return False
题解正确代码参考出处
https://leetcode-cn.com/problems/linked-list-cycle/solution/python3-shuang-zhi-zhen-141-by-littlelion_njuer/
疑惑:while head.next and head.next.next:
这时候会显示fast=fast.next.next 错误
???为何
- 反思
不可被题目给的所困住
上一篇: 图的遍历——深度优先搜索