141.环形链表
# 141.环形链表
给你一个链表的头节点 head ,判断链表中是否有环。
输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。
- 遍历一轮链表,让链表中所有结点的指向全部反向,phead和p结点之间断,pnext记录p节点的后继,当pnext最终又指回到最初链表的首节点时,则说明链表存在环。还有一种更通俗的思路,设置快慢指针,每移动一个节点判断是否相碰,如果两个指针最终能够相碰则说明存在环。这两种思路空间复杂度都是O(1)。
- 如果用哈希表存放记录访问过的ListNode,用containskey()判断是否有环,空间复杂度为O(n)。
原理:只要一个数组是环形的,那么遍历的过程中,只要两个指针的步长不相同,那么它们总会相遇(它们走过的路程之差正好等于环形数组大小的整数倍)。
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57