基本資料結構與演算法 之鍊錶

2021-06-18 17:35:30 字數 1692 閱讀 7838

1. 單鏈表逆序

三個指標,第乙個表示當前結點前面的結點,第二個表示當前結點,第三個表示當前結點後面的結點。

將第二個結點的next指標指向第乙個結點。

第乙個結點後移,第二個結點後移,第三個結點後移。

listnode *reverselist(listnode *head)

head->next = null;

head = p1;

return head;

}

2. 從尾到頭輸出單鏈表

遞迴,只許遍歷鍊錶一遍。

先遞迴呼叫next結點的輸出函式,再cout當前結點的值。

void printlistinreverseorder(listnode *head)

return false;

}

4. 有環單鏈表,找到環的起點

兩個指標初始都指向head指標,乙個步長為1,乙個步長為2。當slower到達環的起點時(距離head有k步),faster進入環k步(總共據head2k步)。那麼,slower和faster下次相遇的位置應該是再有k步就能回到環的起點的位置。讓兩個指標分別從head和相遇位置出發,步長均為1,下次再遇到的位置(都走了k步)就是環的起點。

listnode *findcirclestart(listnode *head)

if(faster == null)

return null;

slower = head;

while(slower != faster)

return slower;

}

5. 未排序的鍊錶中移除重複的結點。

1) 使用hash表,遍歷鍊錶將結點插入到hash表,如果表中已經存在則跳過該結點,否則執行插入。

2) 不使用額外空間。兩重迴圈。

6. 找到單鏈表中倒數第n個結點。

兩個指標。第乙個指標先向後移動n個結點。第二個指標在head處不動。然後兩個指標同時向後移動。直到第乙個指標指向null,此時第二個指標指向的就是倒數第n個結點。

7. 刪除單鏈表中的乙個結點。只給出了指向該結點的指標,沒有給出head。

將其後面乙個結點的值複製到該結點。然後將後面的結點刪掉。如果該結點是最後乙個結點,則這個方法不能使用。

8. 兩個單鏈表加法。

對應結點相加,儲存進製。直到某個鍊錶到達尾部為止。此時用當前的進製和剩下的那個單鏈表繼續相加。

注意:當兩個鍊錶都到達尾部時,可能還有進製,要為進製建立乙個新的結點儲存之。

9. 給定乙個值x,將單鏈表中的結點分割成兩部分,小於x和大於等於x。

linknode* partition(linknode *head, int x)

else

}else

else

}cur = cur->next;

} if(lesshead == null) }

else

return head;

}

基本資料結構 鍊錶

鍊錶 鍊錶與陣列的區別是鍊錶中的元素順序是有各物件中的指標決定的,相鄰元素之間在物理記憶體上不一定相鄰。採用鍊錶可以靈活地表示動態集合。鍊錶有單鏈表和雙鏈表及迴圈鍊錶。書中著重介紹了雙鏈表的概念及操作,雙鏈表l的每乙個元素是乙個物件,每個物件包含乙個關鍵字和兩個指標 next和prev。鍊錶的操作包...

基本資料結構 鍊錶

談到鍊錶之前,先說一下線性表。線性表是最基本 最簡單 也是最常用的一種資料結構。線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的。線性表有兩種儲存方式,一種是順序儲存結構,另一種是鏈式儲存結構。順序儲存結構就是兩個相鄰的元素在記憶體中也是相鄰的...

基本資料結構(2) 鍊錶

鍊錶開發於1955 56,由當時所屬於蘭德公司 英語 rand corporation 的艾倫紐維爾 allen newell 克里夫肖 cliff shaw 和赫伯特西蒙 herbert simon 在他們編寫的資訊處理語言 ipl 中做為原始資料型別所編寫。ipl被作者們用來開發幾種早期的人工智...