代码随想录(day8)—环形链表

题目

代码随想录(day8)—环形链表_第1张图片

代码随想录(day8)—环形链表_第2张图片

代码随想录(day8)—环形链表_第3张图片

预备知识点:

for和while的区别

while语句属于循环语句,在判断是,如果条件为true,则会继续判断,直到false为止,即会进行多次判断(除非一开始条件就是错的)。

if语句属于条件判断语句,如果条件是true,则继续执行,为false则跳出语句不执行,只会进行单次判断。

while与if语句的最大的相同点是都有至少一步的判断。

参考链接:while和if的区别-CSDN博客

Python中self用法详解

面向对象最重要的概念就是类(class)和实例(instance),类是抽象的模板,比如学生这个抽象的事物,可以用一个Student类来表示。而实例是根据类创建出来的一个个具体的“对象”,每一个对象都从类中继承有相同的方法,但各自的数据可能不同。

self在类中是必不可少的,它帮助类的方法识别并操作实例数据。

参考链接:Python中self用法详解_python self-CSDN博客

参考链接:

理解Python的链表ListNode_python listnode-CSDN博客

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def detectCycle(self, head):
        slow = head
        fast = head
        
        # 检查链表是否有环
        while fast and fast.next:
            fast = fast.next.next
            slow = slow.next
            
            # 找到快慢指针相遇的点
            if fast == slow:
                slow = head
                # 这里的作用是当fast和slow相等时,返回入环的第一个节点
                while fast != slow:
                    fast = fast.next
                    slow = slow.next
                return slow
        
        # 如果没有环,返回 None
        return None

你可能感兴趣的:(python学习,链表,数据结构)