数据结构环形链表(java实现)
程序员文章站
2022-04-15 18:37:21
解法1:快慢指针/** * 思路: * 快慢指针 * 只要慢指针被追上就说明有循环 */ public static boolean hasCycle(ListNode head) { if (head==null)return false; ListNode fast=head; ListNode slow=head; while (fast.next!=null&&fast.next.next!=nul...
解法1:快慢指针
/**
* 思路:
* 快慢指针
* 只要慢指针被追上就说明有循环
*/
public static boolean hasCycle(ListNode head) {
if (head==null)return false;
ListNode fast=head;
ListNode slow=head;
while (fast.next!=null&&fast.next.next!=null) {
fast = fast.next.next;
slow = slow.next;
if (slow==fast)return true;
}
return false;
}
时间复杂度:On
空间复杂度:O1
解法2:hashSet
/**
* 思路:
* 暴力法,遍历链表
* 把链表放入set集合中,一旦有重复就能用方法判断出来
*/
public static boolean hasCycle(ListNode head) {
HashSet<ListNode> set = new HashSet<>();
while (head!=null){
if (set.contains(head))return true;
set.add(head);
head=head.next;
}
return false;
}
时间复杂度:On
空间复杂度:On
本文地址:https://blog.csdn.net/qq_38783664/article/details/110240219