141. 环形链表
1.想法:
利用快慢指针,快的指针每次走两个节点,慢的指针每次走一个节点,如果两个指针相遇,那么一定存在环。
原因:如果存在环,那么一定是快指针先进入,而慢指针后进入。且它们之间相距k个节点。
1.K%2 == 0 那么下一步一定是相距K-1(奇数问题)个节点的问题。
2.K %2 == 1那么下一步一定是相距k-1(偶数问题)个节点的问题。
所以所有相距K节点的问题与我们相距0节点问题在本质上是同一个问题。相距0个节点就是相遇了。
2.代码:
public boolean hasCycle(ListNode head) {
if(head == null||head.next == null)return false;
else{
ListNode fast = head;
ListNode slow = head;
while(fast!=null&&fast.next!=null){
fast = fast.next.next;
slow = slow.next;
if(fast == slow){
return true;
}
}
return false;
}
}