Java学习笔记
Leetcode刷题经验
热题HOT100
142、环形链表 II
解题思路:
该题其实可以直接采用哈希表去存储这些数字,若发现哈希表里已有这个元素,则表明有环,为了降低空间复杂度,这里采用双指针的思想去进行求解,即快指针与慢指针,为了方便,这里直接借鉴官方提供的思路与算法:
时间复杂度: O ( N ) O(N) O(N),这里的 N N N指的是链表的总节点个数;空间复杂度: O ( 1 ) O(1) O(1),由于采用的是双指针,故只需要常数级的空间即可完成。
public class Solution {
public ListNode detectCycle(ListNode head) {
ListNode fast=head;
ListNode slow=head;
while(fast!=null && fast.next!=null){
fast=fast.next.next;
slow=slow.next;
if(slow==fast) break;
}
if(fast==null||fast.next==null){
return null;
}
fast=head;
while(fast!=slow){
fast=fast.next;
slow=slow.next;
}
return fast;
}
}
欢迎大家交流,一起进步!