環形鏈表【手繪漫畫】面試必考之雙指針(LeetCode 141)

在這裏插入圖片描述

圖解算法與數據結構

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~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章