解法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 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
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!