判断链表是否有环
可以使用快慢指针的方式判断链表是否有环。
定义两个指针,一个快指针和一个慢指针,初始时都指向链表的头节点。
快指针每次向后移动两步,慢指针每次向后移动一步。如果链表中存在环,那么快指针和慢指针必定会在某个节点相遇。
如果快指针到达链表的末尾(即快指针的下一个节点为空),则链表不含环。
以下是具体实现的伪代码:
function hasCycle(head):
if head == null or head.next == null:
return false
slow = head
fast = head.next
while slow != fast:
if fast == null or fast.next == null:
return false
slow = slow.next
fast = fast.next.next
return true
时间复杂度:O(n),其中 n 是链表的节点数。最坏情况下,快指针需要遍历整个链表才能判断是否有环。
空间复杂度:O(1)。只使用了常数级别的额外空间
原文地址: https://www.cveoy.top/t/topic/h9zm 著作权归作者所有。请勿转载和采集!