苏州和城乡建设局网站,舆情通,wordpress页脚小工具导航,chrome google给你一个链表的头节点 head #xff0c;判断链表中是否有环。
如果链表中有某个节点#xff0c;可以通过连续跟踪 next 指针再次到达#xff0c;则链表中存在环。 为了表示给定链表中的环#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置#xff08;…给你一个链表的头节点 head 判断链表中是否有环。
如果链表中有某个节点可以通过连续跟踪 next 指针再次到达则链表中存在环。 为了表示给定链表中的环评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置索引从 0 开始。注意pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 则返回 true 。 否则返回 false 。
示例 1
输入head [3,2,0,-4], pos 1 输出true 解释链表中有一个环其尾部连接到第二个节点。 示例 2
输入head [1,2], pos 0 输出true 解释链表中有一个环其尾部连接到第一个节点。 示例 3
输入head [1], pos -1 输出false 解释链表中没有环。 提示
链表中节点的数目范围是 [0, 104] -105 Node.val 105 pos 为 -1 或者链表中的一个 有效索引 。 进阶你能用 O(1)即常量内存解决此问题吗
Related Topics 哈希表 链表 双指针
方法一快慢指针
public class Solution {public boolean hasCycle(ListNode head) {if (head null) {return false;}ListNode slow head;ListNode fast head.next;while (fast ! null) {fast fast.next;if (fast ! null) {fast fast.next;}if (fast slow) {return true;}slow slow.next;}return false;}
}方法二使用hashset
public class Solution {public boolean hasCycle(ListNode head) {SetListNode set new HashSet();while (head ! null) {if (!set.add(head)) {return true;}head head.next;}return false;}
}