0%

LeetCode-141

题目

结果

代码

SET

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class ListNode {
int val;
ListNode next;

ListNode(int x) {
val = x;
next = null;
}
}

class Solution {
public boolean hasCycle(ListNode head) {
if (head == null) return false;
Set<ListNode> set = new HashSet<>();
while (head != null) {
if (!set.add(head)) return true;
head = head.next;
}
return false;
}
}

快慢指针(使用常数内存空间)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public boolean hasCycle(ListNode head) {
if (head == null) return false;
ListNode fast = head, slow = head;
boolean flag = false;
while (true) {
fast = fast.next;
if (flag) slow = slow.next;
flag = !flag;
if (fast == null) return false;
if (fast == slow) return true;
}
}
}

复杂度

SET:

  • 时间复杂度:O(N)

  • 空间复杂度:O(N)

快慢指针

  • 时间复杂度:O(N)
  • 空间复杂度:O(1)