刷題筆記19 (陣列 鍊錶)荷蘭國旗問題

2021-09-09 07:08:33 字數 3113 閱讀 2602

二、鍊錶

2.3 測試結果及**

給定乙個陣列arr, 和乙個數num, 請把小於num的數放在陣列的左邊, 等於num的數放在陣列的中間, 大於num的數放在陣列的右邊。

;// 原始陣列

int tmp1[size]=;

// 測試陣列

int tmp2[size]=;

// 對比陣列

int t***[size]=;

// 展示陣列

for(

int cnt =

0; cnt < test_time;

++cnt)

for(

int i =

0; i < size;

++i)

cout <<

"第 "

<< cnt <<

" 次生成:"

;printarray

(t***, size)

;compare

(tmp1, size)

; cout <<

"第 "

<< cnt <<

" 次對比:"

;printarray

(tmp1, size)

;// test(tmp2, size);

// cout << "第 " << cnt << " 次測試:";

// printarray(tmp2, size);

cout << endl;

}return0;

}鍊錶結構定義如下

首先放到陣列裡,然後重建鍊錶

由於荷蘭國旗問題做不到穩定性,其次額外空間複雜度是o(n),於是有這種解法,使這個問題能夠滿足穩定性以及額外空間複雜度o(1)

第一步:元素進入對應鍊錶

準備三個鍊錶less,equal,more

然後不斷去遍歷原始鍊錶,逐個判斷大小關係,逐個對應地加入鍊錶less,equal,more

第二步:重連鍊錶

該步驟主要是考慮哪乙個鍊錶是空的,然後重新連線就可以了

// 重新連線鍊錶

listnode *phead;

if(sh !=

null)}

else

} phead = sh;

}else

phead = eh;

}else

}return phead;}}

;int

main

(int argc,

char

*ar**)

printnode

(head)

;

solution solution;

head = solution.

smallerequalbigger

(head,2)

; cout <<

"第 "

<< cnt +

1<<

" 次測試:\n"

;printnode

(head)

; cout << endl;

}return0;

}

刷題筆記 相交鍊錶

輸入 intersectval 8,lista 4,1,8,4,5 listb 5,0,1,8,4,5 skipa 2,skipb 3 輸出 reference of the node with value 8 輸入解釋 相交節點的值為 8 注意,如果兩個列表相交則不能為 0 從各自的表頭開始算起,...

刷題筆記24 判斷鍊錶是否回文鍊錶

給定乙個鍊錶的頭節點head,請判斷該鍊錶是否為回 文結構。例如 1 2 1,返回true。1 2 2 1,返回true。15 6 15,返回true。1 2 3,返回false。遍歷鍊錶,元素入棧,彈出時再從頭判斷即可 時間複雜度和額外空間複雜度都是o n 利用快慢指標,快指標走兩步,慢指標走一步...

LeetCode刷題筆記 328 奇偶鍊錶

給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 輸入 2 1 3 5 6 4 7 nul...