LeetCode刷題之路 鍊錶(2)

2021-10-10 00:22:52 字數 2717 閱讀 6146

83.刪除排序鍊錶中的重複元素[簡單]

說明:

給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。

示例:

輸入: 1->1->2->3->3

輸出: 1->2->3

解答:解法一:迭代法,需考慮到連續多個(三個及三個以上節點相等的情況)

class solution 

else

}pre.next = null;

return head;

}//空鍊錶,返回空鏈

else}}

解法二:遞迴法,好好理解一下,遞迴比較玄幻,看遞迴演算法需要學會從後往前推理。

class solution 

}

注:遞迴演算法在鍊錶問題的解法上是很常用的,但是往往由於其不好理解,「拐彎抹角」,對初學者並不友好,「遞龜」是門藝術,就跟人類的本質是復讀一樣。遞龜不燒鍵盤次數,不燒滑鼠耐久,就是燒腦。理解遞迴演算法需要學會從後往前推到,將後面看作黑匣子,並結合圖例思考,方便理解。

19. 刪除鍊錶的倒數第n個節點[中等]

說明:

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。高階:掃瞄實現。

示例:

給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5.

解答:

解法一:雙指標移動法。front和later指標起始位置一樣,利用front指標先動n步製造指標位置差距後雙指標按同速度前進,當front指標指向鍊錶末端時,later指標指向鍊錶倒數第n個節點。時間複雜度o(l),l 為鍊錶長度,空間複雜度o(1)。

class solution  

while(front.next != null)

later.next = later.next.next;

return pre.next;}}

解法二:考慮先遍歷鍊錶求出鍊錶長度,再移動l-n來定位要刪除的節點,不過此方法時間複雜度要高,因為在再遍歷鍊錶一遍的基礎上需要再重新遍歷要刪除的節點。具體**不再展開。

24. 兩兩交換鍊錶中的節點[中等]

說明:

給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。

你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

示例:

給定 1->2->3->4, 你應該返回 2->1->4->3.

解答:

解法一:迭代法。建立啞節點做煉表新頭並指標pre指向啞節點,前進移動指標pre並建立新的指標pointer1和pointer2指向要互換的鍊錶節點,進行swap操作,pre指標繼續前進移動兩步,開始下一輪迭代。以此類推。演算法時間複雜度o(l),l為鍊錶長度。空間複雜度為o(1)。

解法二:遞迴法。空時複雜度均為o(l)。

class solution 

listnode pointer1 = head;

listnode pointer2 = head.next;

pointer2.next = pointer1;

return pointer2;}}

445. 兩數相加ii[中等]說明:給你兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存一位數字。將這兩數相加會返回乙個新的鍊錶。

你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。

示例:

輸入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 8 -> 0 -> 7

注:7243+564=7807

解答:據說反轉鍊錶,逆序鍊錶得想到棧!!!解法一:考慮將兩鍊錶資料分別壓入各自棧中,根據先進後出規則加減。時間複雜度為o(max(m,n)),m,n分別為鍊錶長度。空間複雜度,由於需要棧空間,複雜度為o(m+n)。

class solution 

while(l2 != null)

int flag = 0;//進製標識

listnode ansnode = null;

while (!stack1.isempty() || !stack2.isempty() || flag != 0)

return ansnode;}}

leetcode刷題 鍊錶篇

class solution return result class solution class solution return cura 注 思路 相交節點到尾部的節點數是一樣的,所以當cura遍歷到尾部時,再從headb開始遍歷,同當curb遍歷到尾部時,再從heada開始遍歷,他們指標相遇時...

Leetcode刷題鍊錶之環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。定義兩個指標,從頭節點開始,兩個指標都向右移動,但是設定他們的移動速度不一樣,如果為環形鍊錶,則指標肯定會相遇。若為直鏈表,兩個指標至少有乙個為空。definition for singly linked list.class listnode public cla...

Leetcode鍊錶刷題 pytho語言

為方便後續的使用查詢,記錄一下 函式包括 找到兩個單鏈表相交的起始節點 反轉單鏈表 刪除鍊錶中等於給定值 val 的所有節點 definition for singly linked list.class listnode object def init self,x self.val x self...