演算法學習日記 單鏈表(1)

2021-10-05 18:01:49 字數 2320 閱讀 1763

鍊錶是常用的線性資料結構。鍊錶的結構就好像是一列火車,每個車廂都代表乙個結點,結點與結點依次相連。單鏈表是所有鍊錶型別中最直接的,單鏈表中每個節點都存了指向下乙個節點的指標。單鏈表就像一列只能從車頭走到車尾的列車。

單鏈表vs雙鏈表:雙鏈錶比單鏈表多乙個指向前乙個元素的指標。雙鏈表可以來回的遍歷整個鍊錶,所以在遍歷結點時更加高效。既然雙鏈表如此高效,我們為什麼還需要用單鏈表呢?單鏈表結構更加簡單,所以空間限制的情況下我們更傾向於用單鏈表。在面試中,鍊錶問題都是以單鏈表的形式存在的,因為單鏈表可以考驗從業人員處理邊界問題和優化空間的能力。

鍊錶回文判斷:回文就是往前讀和後讀都是一樣的,比如1->2->1。這道題如果沒有空間限制的話,實現很簡單。最容易想到的方法是將單鏈表的元素全部存到棧裡面。通過棧先進後出的特點,將元素給逆序。鍊錶如果是

1->2->3

放入到棧中,那我們取出來就是3

,2,1

。如何做到時間複雜度為o(n), 額外空間複雜度為o(1)?

棧方法優化:回文有乙個特性,回文是兩邊對稱的,比如1->2->1 這個回文鍊錶是以2為中心對稱的。我們可以通過快慢指標來找到鍊錶中心點。通過快指標移動2位慢指標移動1位,讓慢指標停在鍊錶中點的位置。這樣我們就只需要將中點後面的元素存入棧中,可以節省原來方法一半的空間複雜度。但是由於大o不考慮常數項,空間複雜度還是o(n)。

中點逆序法:這個方法和優化過的棧方法有異曲同工之妙,都是利用了回文兩邊對稱的特性。通過把中點到尾端的元素重新逆向排列,來比較兩邊的元素。本質上就是把乙個從左到右的鍊錶結構變成乙個雙頭的由外向內的結構,比如1->2->3 變成1->2<-3。 但是這裡面有很多細節要注意,我們的鍊錶大小可以是雙數,也可以是單數。如果是單數鍊錶慢指標恰好停在了鍊錶的中間元素上,而雙數的鍊錶慢指標會停在了中間元素之前的位置。可以通過快指標是否為null來判斷雙數和單數,然後處理這兩種不同的情況,**如下:

classlnode }

publicclassispalindromelist

//create fast and slow node

lnode

fast

= root;

lnode

slow

= root;

//fast move two position while slow more one

//error mistakes about &&

while(

fast

.next

!=null&&

fast

.next

.next

!=null)

if(

fast

.next

!=null)

fast

= slow

.next;

slow

.next

=null;

lnode

supe***st

= fast

.next;

while(

supe***st

!=null)

fast

.next

= slow;

lnode

left

= root;

lnode

right

= fast;

while(

left

!=null)

left

= left

.next;

right

= right

.next;

} returntrue; }

publicstaticvoidmain(string

args)

} 總結:鍊錶問題往往是用來考察開發人員處理邊界和優化空的能力。單鏈表裡最關鍵的技巧就是快慢指標。大部分單鏈表的題都可以用快慢指標來優化,比如找到單鏈表裡倒數第n個元素、單鏈表分治排序,單鏈表是否有環等。

左神演算法學習日記 單鏈表(一)

最近在找實習工作,做個左神演算法的學習日記,方便以後鄙視自己。題一 判斷乙個鍊錶是否為回文結構 題目 給定乙個鍊錶的頭節點head,請判斷該鍊錶是否為回文結構。例如 1 2 1,返回true。1 2 2 1,返回true。15 6 15,返回true。1 2 3,返回false。高階 如果鍊錶長度為...

演算法學習之單鏈表

單鏈表 包含乙個未知型別的資料以及乙個指向下乙個結點的指標 1.初始化單鏈表 建立頭結點,令他的下一結點為空 2.插入元素 遍歷該鍊錶直到到達插入點,建立新結點,載入資料,插入鍊錶 3.輸出單鏈表 遍歷整個鍊錶輸出每個結點的資料 4.輸出單鏈表長度 5.判斷單鏈表是否為空 頭結點的指標是否為空 6....

演算法學習06 單鏈表

乙個單向鍊錶基本由兩個元素組成,即資料字段和指標,而指標通常指向下乙個節點記憶體所在的位址。最後乙個節點沒有其他節點可以連線,因此指標的值為null。建立與遍歷 以動態分配產生鍊錶節點的方式,可以先行定義乙個類資料型別,要有乙個資料字段,接著在類中定義乙個指標變數,其資料型別與此類相同,作用是指向下...