圖解算法與數據結構
1、前言
今天開始的是雙指針!
下面一起來看看吧!!!
讓我們從一個經典問題開始:
環形鏈表進階版【手繪漫畫】面試必考之雙指針(LeetCode 142)
上次講了進階版的,你會發現普通版本太easy了~
還是來看題吧!
2、實例
LeetCode 142,一個求證鏈表中有沒有環的題。
3、正文
一起來看一下:
兩種情況:
1. 第一種情況:不出意外,fast
每輪再多走 1 步(這纔是名副其實的快指針~),最終兩個指針一定會相遇,返回 true
;
2. 第二種情況:fast
走到鏈表末端,下一節點爲空,說明鏈表無環,直接 break
,返回 false
(如果存在環,兩個指針必然會相遇,追擊問題,fast
速度是 slow
的二倍~);
妙啊!!!
4、代碼
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
if(head==nullptr) return false;
auto fast=head,slow=head;
while(fast){
fast=fast->next;
slow=slow->next;
if(fast) fast=fast->next;
else break;
if(fast==slow) return true;
}
return false;
}
};
如果有幸幫到你,請幫我點個【贊】,給個【關注】!如果能順帶【評論】給個鼓勵,我將不勝感激。
如果想要更多的資源,歡迎關注 @我是管小亮,文字強迫症MAX~