1. 鍊錶的基本操作:
head表示是第乙個節點,我們會通常在第乙個節點前加乙個dummy節點。這樣可以避免處理頭指標,統一處理所有的情況,最後返回dummy->next。比如說,我們在刪除節點的時候,在第k個元素前插入節點。。。這些情況都隱含包括頭節點場景,用dummy節點可以統一處理,不用單獨拎出來。另外注意,如果可能會修改頭結點的,函式一定要返回新的頭結點。
這裡的操作包括:建立空鍊錶,建立鍊錶(頭插入,尾插入),找前驅節點,增加乙個節點(節點之前/之後),第k個元素之前(之後)插入新節點,刪除節點,鍊錶reverse(頭結點插入,產生乙個新鍊錶),鍊錶reverse(不產生新鍊錶),鍊錶的顯示,鍊錶的摧毀
2.add two numbers
1.使用尾插法
2.考慮進製carry
3.兩個鍊錶長度不一致的處理
4.最後carry如果大於0,需要新建乙個node.
有乙個類似的題目是add binary,對應的是字串的加法
1.從末位開始加,可以先string.reverse,這樣可以順序操作。
2.數字串和數字的轉換。a[i]-'0'得出的是a[i]對應的int;val+'0'得出的就是val對應的string.
3.得到的結果往字串前面插入,保證末位的數字在最後面。
4.考慮進製。
3.reverse linked list ii
這個要注意細節,是鍊錶的逆序的公升級版
普通鍊錶的逆序可以參考
4.partition list
將比x小的放到左鍊錶,其它放到右鍊錶。最後將兩個鍊錶鏈結起來。
從原來的鍊錶中依次取節點資料,用尾查法插入新的鍊錶中,可以保留原來的順序。尾插法可以用while去找到最後乙個節點,但在此例用乙個指標,每次插入後指向當前的節點,這樣就始終指向最後乙個節點,不用while去找了。
5.remove duplicates from sorted list
刪除重複的元素,鍊錶是排好序的。
6.rotate list
1.鏈結成環
2.從首個節點,繼續走len-k個節點,斷環
7.remove nth node from end of list
兩個指標,p先走n步,然後q開始走。當p走到末尾時,q正好到了待刪除節點。
8.swap nodes in pairs
9.reverse nodes in k-group
每k個元素為乙個group,翻轉,然後串聯起來。如果不夠k個元素,則維持不變。
10.linked list cycle
通常的考點有:1)有沒有環。
2)環的入口節點。
3) 環的長度。
11.reorder list
這個題考查了鍊錶的一些基礎操作
找到中間節點,斷開
後半截鍊錶reverse
合併兩個鍊錶
12.merge two sorted lists
有序鍊錶的合併。尾插法,從前向後遍歷兩條鍊錶,選擇較小的插到鍊錶尾部;比較完後,如果一條鍊錶還有剩餘,插入到最後。
有序陣列的合併。也有乙個例子:
選擇從後往前操作,選擇較大的資料,可以避免不必要的操作。如果乙個陣列還有剩餘,直接插入即可。
13.insertion sort list
鍊錶的插入排序。
對於陣列的插入排序。假如前n-1個元素是有序的,將第n個元素插入進有序陣列。要做兩件事情,第一件事情找到要插入的點,第二件事情,因為陣列是一塊連續的記憶體,需要將插入點後的元素後移。這是基本的思路,當然我們可以採用swap的方法,將第n個元素,與n-1比較,如果大什麼也不操作,如果小則交換;然後與n-2比較。。。這樣做的好處是,避免元素後移的effort。
對於鍊錶的插入排序,就不用考慮元素後移了。因為鍊錶使用的是指標鏈結不同的節點,並不是連續的記憶體。所以我們只是要找到要插入元素的前驅,插入即可。
14.sort list(歸併排序)
要求時間複雜度是o(nlogn),空間複雜度是常量。
要求o(nlongn)馬上想到的就是歸併和快排,只是這兩種我們通常用於陣列,這是對鍊錶。
一般歸併要求的空間複雜度不會是常量,要求o(n)的空間複雜度,因為它要複製相等的空間用來合併。但是在鍊錶中要求常數的空間複雜度也是可以的。
快排一般不太用於鍊錶的排序,因為鍊錶不能隨機訪問,相對於歸併來說,資料交換的次數太多,會超時。
這裡有一篇實現,先mark,回頭再寫。
鍊錶之雙向鍊錶
首先在說下單鏈表,才能和雙鏈表作比較 單鏈表 單向鍊錶 由兩部分組成 資料域 data 和結點域 node 單鏈表就像是一條打了很多結的繩子,每乙個繩結相當於乙個結點,每個節結點間都有繩子連線,這樣原理的實現是通過node結點區的頭指標head實現的,每個結點都有乙個指標,每個節點指標的指向都是指向...
鍊錶之環形鍊錶
leetcode 141 easy 定義兩個指標slow和fast,只要slow指標追上每次走兩步的fast指標的話就有環,否則就沒!package linkedlist public class main0141環形鍊錶 class solution141 slow slow.next fast ...
鍊錶之迴圈鍊錶
單向鍊錶 鍊錶之單向鍊錶 迴圈鍊錶是單向鍊錶的變化形式。單向鍊錶的尾部的指標域是空的,而迴圈鍊錶的尾部指標是指向鍊錶的頭結點的,其結構如圖一所示。圖 一循 環鏈表結 構圖一 迴圈鍊錶結構 圖一迴圈鍊錶 結構從上面結構可以看出,迴圈鍊錶的節點形成了乙個圈。在進行遍歷時,可以從任意節點開始。如果記錄了尾...