141.环形链表
链接:141.环形链表
难度:Easy
标签:哈希表、链表、双指针
简介:给定一个链表,判断链表中是否有环。
题解 1 - typescript
- 编辑时间:2021-03-06
- 执行用时:92ms
- 内存消耗:40.4MB
- 编程语言:typescript
- 解法介绍:快慢指针。
function hasCycle(head: ListNode | null): boolean {
  if (head === null || head.next === null) return false;
  let fast: ListNode | null = head.next;
  let slow: ListNode | null = head;
  while (fast !== slow && fast !== null && fast.next !== null) {
    fast = fast.next.next;
    slow = slow!.next;
  }
  return fast === slow;
}
题解 2 - typescript
- 编辑时间:2020-10-09
- 执行用时:96ms
- 内存消耗:40MB
- 编程语言:typescript
- 解法介绍:双指针。
/**
 * @param {ListNode} head
 * @return {boolean}
 */
var hasCycle = function (head) {
  let p1 = head;
  let p2 = head;
  while (p2?.next) {
    p1 = p1.next;
    p2 = p2.next.next;
    if (p1 === p2) return true;
  }
  return false;
};
题解 3 - cpp
- 编辑时间:2022-03-03
- 执行用时:8ms
- 内存消耗:8MB
- 编程语言:cpp
- 解法介绍:双指针。
class Solution {
   public:
    bool hasCycle(ListNode *head) {
        if (!head) return false;
        ListNode *fast = head->next, *slow = head;
        while (fast && fast->next && fast != slow) {
            slow = slow->next;
            fast = fast->next->next;
        }
        return fast && fast->next;
    }
};
题解 4 - cpp
- 编辑时间:2023-07-29
- 执行用时:8ms
- 内存消耗:8MB
- 编程语言:cpp
- 解法介绍:快慢指针。
class Solution {
public:
    bool hasCycle(ListNode *head) {
        if (!head) return false;
        ListNode *slow = head, *fast = head;
        while (fast && fast->next && fast->next != slow) {
            fast = fast->next->next;
            slow = slow->next;
        }
        return fast && fast->next == slow;
    }
};
题解 5 - java
- 编辑时间:2020-02-13
- 内存消耗:47MB
- 编程语言:java
- 解法介绍:使用快慢指针,若快指针与慢指针指向一个节点则存在。
public class Solution {
    public boolean hasCycle(ListNode head) {
        if (head == null || head.next == null)
			return false;
		ListNode slow = head;
		ListNode fast = head.next;
		while (fast != null && fast.next != null) {
			if (slow == fast)
				return true;
			slow = slow.next;
			fast = fast.next.next;
		}
		return false;
    }
}
题解 6 - c
- 编辑时间:2021-11-19
- 执行用时:12ms
- 内存消耗:7.7MB
- 编程语言:c
- 解法介绍:快慢指针。
bool hasCycle(struct ListNode *head) {
    if(!head) return 0;
    struct ListNode *slow = head;
    struct ListNode *fast = head->next;
    while (fast && fast->next && fast != slow) fast = fast->next->next, slow = slow->next;
    return fast == slow;
}
题解 7 - python
- 编辑时间:2023-07-29
- 执行用时:64ms
- 内存消耗:20.2MB
- 编程语言:python
- 解法介绍:同上。
class Solution:
    def hasCycle(self, head: Optional[ListNode]) -> bool:
        if not head:
            return False
        slow = fast = head
        while fast and fast.next and fast.next != slow:
            fast = fast.next.next
            slow = slow.next
        return fast and fast.next == slow