代码随想录(day8)—环形链表
题目
预备知识点:
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