將單向鍊錶按某值劃分成左邊小、中間相等、右邊大的形式
【要求】
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 之後每次在...