十一 把鍊錶分為小中大三個部分

2021-09-22 12:59:17 字數 716 閱讀 4239

將單向鍊錶按某值劃分成左邊小、中間相等、右邊大的形式

【要求】

1.要求每部分裡的節點從左 到右的順序與原煉表中節點的先後次序一致。

2.時間複雜度請達到o(n),額外空間複雜度請達到o(1)。

【分析】

因為要求穩定性,空間複雜度o(1),所以快速排序不行。

1.提供三個容器(small,equal,big);

2.每個容器裡面有兩個節點變數(乙個頭結點,乙個尾節點),

以小於為例,找到小於的節點,讓頭結點指向她,同時他變為尾節點(這樣可以保證穩定性)

3.只需要遍歷乙個鍊錶,時間複雜度是o(n),只需要有限的幾個變數,額外的空間複雜度是o(1);

【**實現】

public static node listpartition2(node head,int pivot)else 

}else if (head.value==pivot)

else

}else else

}head=next;//head移動到下乙個結點

} //遍歷結束,重新構建三個部分的連線關係

(連線小於和等於,同時構建好邊界條件,為等於和大於準備)

if (st!=null)

if(et!=null)

return sh!=null?sh:eh!=null?eh:bh;//返回頭結點

}}

鍊錶拆分為奇偶表

題目 將乙個帶頭結點單鏈表a分解成兩個帶頭結點的單鏈表a和b,使得a中含有原表中序號為奇數的元素,b中為偶數,且保持其相對位置不變 分析 首先我們需要分配乙個節點空間為b作為頭節點,然後設定乙個flag,為0時認為是奇數,鏈給a,為1時認為是 偶數,連給b,採用尾插法 如下 struct link ...

單向鍊錶小實驗

我會把程式全部貼上,直接gcc就能通過,方便學習。整套的基礎是我以前學習的時候從其他部落格能 粘過來的。很久了,貌似也沒改變什麼。這些介面就是為了了解什麼是鍊錶,鍊錶怎麼構建和使用。實際使用比這個要健壯很多,拋磚引玉。鍊錶是什麼呢,其實很簡單,鍊錶就是儲存同一類資料的乙個鏈,像珍珠項鍊一樣,乙個疙瘩...

鍊錶使用小技巧

typedef struct data node data node t 假設上面的結構體定義是鏈結節點的型別,很多時候在初始化鍊錶的時候,會定義乙個data node t 型別的結構體指標作為煉表頭,該指標一般為全域性變數 比如 data node t data node header 之後每次在...