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)。
解法二:考慮先遍歷鍊錶求出鍊錶長度,再移動l-n來定位要刪除的節點,不過此方法時間複雜度要高,因為在再遍歷鍊錶一遍的基礎上需要再重新遍歷要刪除的節點。具體**不再展開。class solution
while(front.next != null)
later.next = later.next.next;
return pre.next;}}
24. 兩兩交換鍊錶中的節點[中等]
說明:
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例:
給定 1->2->3->4, 你應該返回 2->1->4->3.
解答:
解法一:迭代法。建立啞節點做煉表新頭並指標pre指向啞節點,前進移動指標pre並建立新的指標pointer1和pointer2指向要互換的鍊錶節點,進行swap操作,pre指標繼續前進移動兩步,開始下一輪迭代。以此類推。演算法時間複雜度o(l),l為鍊錶長度。空間複雜度為o(1)。
解法二:遞迴法。空時複雜度均為o(l)。
445. 兩數相加ii[中等]說明:給你兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存一位數字。將這兩數相加會返回乙個新的鍊錶。class solution
listnode pointer1 = head;
listnode pointer2 = head.next;
pointer2.next = pointer1;
return pointer2;}}
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
示例:
解答:據說反轉鍊錶,逆序鍊錶得想到棧!!!解法一:考慮將兩鍊錶資料分別壓入各自棧中,根據先進後出規則加減。時間複雜度為o(max(m,n)),m,n分別為鍊錶長度。空間複雜度,由於需要棧空間,複雜度為o(m+n)。輸入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 8 -> 0 -> 7
注:7243+564=7807
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...