20190608鍊錶思路

2021-09-24 05:51:41 字數 1385 閱讀 7701

鍊錶:由兩部分組成,資料和位址(指向下乙個結點),有頭結點即可找到後續元素。

包含頭結點,尾結點。

鍊錶的操作:

1、建立

如果鍊錶為空,建立乙個結點,並把頭給之,並且每建立乙個結點,頭賦予尾,重新開闢空間,依次迴圈,最後釋放空間,並把頭結點返回。

2、插入

宣告兩個指標p,q,以及插入值指標,當值小於插入值,並且下乙個不為空時,迴圈q = p,p = p->next;退出迴圈後,當p為頭指標時(頭插),新插入結點下乙個指向頭,頭賦予pnew,當p下乙個為空時(尾插),p->next = pnew;當在中間插入時,前乙個指標q指向pnew,pnew指向p。

3、刪除

判斷是否為空,當p的值不為要刪除的值,並且p下乙個不為空時,迴圈q = p,p = p->next;

接著有頭刪,只用頭指向頭的下乙個,中間刪,q的下乙個指向p的下乙個。釋放空間

4、排序

兩個指標,用選擇排序。

5、合併兩個鍊錶

宣告兩個頭指標,先遍歷乙個,走完接著第乙個走即可。

6、判斷鍊錶是否有環

bool型別,宣告乙個慢指標,乙個快指標,當兩個指標非空時,乙個走一步,乙個走兩步,二者相等時,返回真。

7、逆序

宣告三個指標,p(指向頭),pf,pn,開始時,pf指向head,pf下乙個指向p,然後pf下乙個賦空,當p下乙個不為空時,p下乙個指向pn,p下乙個賦空,pf = p,p = pn,迴圈退出後,p的下乙個指向pf。

8、查詢中間結點

宣告指標p為頭,q為頭,當p下乙個以及下下乙個不為空時,q走一步,p走兩步,結束時返回q所指向的值。

9、查詢倒數第幾個

宣告乙個指標p指向頭,while迴圈n,指標走一次,n–一次,相當於指標p提前走了n步,再宣告另乙個指標q指向頭,在p當前基礎上繼續走,q開始走,當p為空時,q所指向的值就是倒數第n個值。

刪除鍊錶的節點(o(1)時間複雜度)

找出要刪除節點(本身)的下乙個,並且把下乙個的值賦予本身,本身指向下乙個的下乙個。(此種情況是要刪除的節點不在末尾)

要刪除節點在開頭(只有乙個節點)

刪除此節點,賦空,並且把頭賦空

if (ptobedeleted->next != null)

鍊錶有多個節點,刪除尾節點

else if (*plist = ptobedeleted)

宣告頭節點,當不是要刪除節點時,一直走,直至最後,並且頭結點後乙個指向空

else

p->next = null;

delete p;

ptobedeleted = null;

}

鍊錶題思路

2 兩數相加 為了避免兩個輸入鍊錶同時為空,建立乙個 dummy 結點,將兩個結點相加生成的新結點按順序加到 dummy 結點之後,由於 dummy 結點本身不能變,所以用乙個指標 cur 來指向新鍊錶的最後乙個結點。取當前結點值的時候,先判斷一下,若為空則取0,否則取結點值。然後把兩個結點值相加,...

鍊錶問題思路總結 Python描述

對遇到的經典鍊錶問題思路進行乙個總結 class listnode def init self,x self.val x self.next none1 給定乙個單鏈表的結點指標,在o 1 時間內刪除這個節結點 非尾結點 思路 確保當前結點不是none,在此基礎上進行後續處理 a 設定乙個新結點為當...

企業級鍊錶設計思路

define crt secure no warnings include include include 節點結構體 struct linknode 鍊錶結構體 struct llist 取個別名 typedef void linklist 鍊錶的初始化 返回鍊錶結構體 linklist init...