LeetCode刷题记录——第141题(环形链表)

题目描述

给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
LeetCode刷题记录——第141题(环形链表)_第1张图片

示例2

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。
LeetCode刷题记录——第141题(环形链表)_第2张图片

思路分析

  • 利用快慢指针的原理,从head开始,慢指针每次走一步,快指针每次走两步,如果快指针追上了慢指针,就说明存在着环形

代码示例

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def hasCycle(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        if head == None:
            return False
        fast = head
        slow = head
        while fast:
            if fast.next = None:  #说明fast后已经没有节点了,并且没有出现循环,直接返回False
                return False
            else:
                slow = slow.next
                fast = fast.next.next
            if fast == slow:   #fast追上了slow节点
                return True
        return False    # 如果跳出while循环,程序还在运行,说明不存在环形链表
  • 2019年6月24日 于北大图书馆 今天最后一门大作业,还没有交呢,明儿一定要完成呀

你可能感兴趣的:(菜鸟的LeetCode刷题记录)