LeetCode 141. 环形链表
题目描述
思路分析
- 快慢指针:我们使用两个指针,
slow
和fast
。slow
每次移动一步,fast
每次移动两步。- 相遇条件:如果链表中存在环,
slow
和fast
最终会相遇;如果没有环,fast
会到达链表的末尾(即fast
或fast.next
为null
)。- 时间复杂度:O (n),其中 n 是链表的节点数。最坏情况下,
fast
指针需要遍历整个链表。- 空间复杂度:O (1),只使用了常数级别的额外空间。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func hasCycle(head *ListNode) bool {
if head == nil || head.Next == nil {
return false
}
slow, fast := head, head
for fast != nil && fast.Next != nil {
slow = slow.Next
fast = fast.Next.Next
if slow == fast {
return true
}
}
return false
}
- 时间复杂度:O (n),在最坏情况下,我们可能需要遍历整个链表。
- 空间复杂度:O (1),只使用了常数级别的额外空间。
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用