LeetCode解題集 快慢指標

2021-10-11 21:38:34 字數 939 閱讀 1256

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。

暴力解法

令快指標先走n步,慢指標等待快指標停下後隨快指標一起前進,同時用另一指標ret指向慢指標的上乙個節點。當快指標指向null時,ret正好指向倒數第n+1個結點處,此時可進行刪除操作。

對於官方解法,可先另一指標指向啞節點,使慢指標從啞節點處開始進行,此操作時間複雜度更少。

struct listnode*

removenthfromend

(struct listnode* head,

int n)

if(low == head)

return head->next;

ret->next = low->next;

//刪除操作,在此之前ret->next指向的即為待刪除節點

return head;

}

給定乙個鍊錶,判斷鍊錶中是否有環。

如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。 為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。注意:pos 不作為引數進行傳遞,僅僅是為了標識鍊錶的實際情況。

如果鍊錶中存在環,則返回 true 。 否則,返回 false 。

始終讓fast的速度大於low,如果fast能追上low,說明是環形鍊錶。

bool hascycle

(struct listnode *head)

return0;

}

快慢指標是雙指標的一種形式,關於雙指標的其他應用,可參考:

leetcode解題集——雙指標,滑動視窗,hash陣列

LeetCode解題 快慢指標

leetcode 第 26 27 80 283屬於一類問題 陣列相關的 快慢指標 另外對於wc問題,hashmap總能求解。80.刪除排序陣列中的重複項 ii 題目描述 給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素最多出現兩次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須...

LeetCode(三)快慢指標 202

題目描述 編寫乙個演算法來判斷乙個數 n 是不是快樂數。快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。如果 可以變為 1,那麼這個數就是快樂數。如果 n 是快樂數就返回 true 不是,則返回 ...

Leetcode 快慢指標與鍊錶

1.給定乙個鍊錶,判斷鍊錶中是否有環。解釋 鍊錶中有乙個環,其尾部連線到第二個節點。ps 從例子中根本看不出來好嘛。自己理解就ok 經典思想,快慢指標,如果有環存在,快指標總會追上慢指標 python definition for singly linked list.class listnode ...