總結之鍊錶

2021-06-28 16:34:15 字數 2168 閱讀 9867

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 ...

鍊錶之迴圈鍊錶

單向鍊錶 鍊錶之單向鍊錶 迴圈鍊錶是單向鍊錶的變化形式。單向鍊錶的尾部的指標域是空的,而迴圈鍊錶的尾部指標是指向鍊錶的頭結點的,其結構如圖一所示。圖 一循 環鏈表結 構圖一 迴圈鍊錶結構 圖一迴圈鍊錶 結構從上面結構可以看出,迴圈鍊錶的節點形成了乙個圈。在進行遍歷時,可以從任意節點開始。如果記錄了尾...