欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

环形链表-力扣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 错误
???为何

  • 反思
    不可被题目给的所困住