列表

详情


141. 环形链表

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false

 

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

 

提示:

 

进阶:你能用 O(1)(即,常量)内存解决此问题吗?

相似题目

环形链表 II

快乐数

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { } };

java 解法, 执行用时: 0 ms, 内存消耗: 42.6 MB, 提交时间: 2023-07-29 23:13:27

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        if ( head == null || head.next == null ) {
            return false;
        }
        ListNode slow = head;
        ListNode fast = head.next;
        while ( slow != fast ) {
            if ( fast == null || fast.next == null ) {
                return false;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        return true;
    }
}

python3 解法, 执行用时: 64 ms, 内存消耗: 18.6 MB, 提交时间: 2022-08-25 15:22:53

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

class Solution:
    def hasCycle(self, head: Optional[ListNode]) -> bool:
        if head == None or head.next == None:
            return False
        
        slow, fast = head, head.next
        while slow != fast:
            if fast == None or fast.next == None:
                return False    
            slow = slow.next
            fast = fast.next.next
        
        return True

golang 解法, 执行用时: 8 ms, 内存消耗: 4.3 MB, 提交时间: 2021-07-19 09:30:46

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func hasCycle(head *ListNode) bool {
    if head == nil || head.Next == nil {
        return false
    }
    slow, fast := head, head.Next
    for slow != fast {
        if fast == nil || fast.Next == nil {
            return false
        }
        slow = slow.Next
        fast = fast.Next.Next
    }
    return true
}

php 解法, 执行用时: 24 ms, 内存消耗: 18.7 MB, 提交时间: 2021-05-12 10:19:31

/**
 * Definition for a singly-linked list.
 * class ListNode {
 *     public $val = 0;
 *     public $next = null;
 *     function __construct($val) { $this->val = $val; }
 * }
 */

class Solution {
    /**
     * @param ListNode $head
     * @return Boolean
     */
    function hasCycle($head) {
        if ( $head == null || $head->next == null )
            return false;
        
        $slow = $head;
        $fast = $head->next;

        while ( $slow != $fast ) {
            if ( $fast == null || $fast->next == null ) return false; // 快指针走到尽头了, 说明无环
            $slow = $slow->next;  // 慢指针一次走一步
            $fast = $fast->next->next;  // 快指针一次走两步
        }
        return true;
    }
}

python3 解法, 执行用时: 64 ms, 内存消耗: 18.6 MB, 提交时间: 2021-05-12 09:52:53

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

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        has_seen = set()
        while head:
            if head not in has_seen:
                has_seen.add(head)
                head = head.next
            else:
                return True
        return False
            

上一题