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