リンクリストを指定して、ノードを昇順で並べ替える関数を記述します。

Practice this problem

アイデアは、 sortedInsert() リンクリストをソートする関数。空の結果リストから始めます。ソースリストを繰り返し処理し、 sortedInsert() その各ノードを結果リストに追加します。注意してください .next 結果リストに移動する前に、各ノードのフィールド。

以下は、それを示すC、Java、およびPythonプログラムです。

C


ダウンロード  コードを実行する

出力:

2 —> 3 —> 4 —> 6 —> 8 —> 9 —> NULL

Java


ダウンロード  コードを実行する

出力:

2 —> 3 —> 4 —> 6 —> 8 —> 9 —> null

Python


ダウンロード  コードを実行する

出力:

2 —> 3 —> 4 —> 6 —> 8 —> 9 —> None

上記のソリューションの時間計算量は次のとおりです。 O(n2)、 どこ n リンクリスト内のノードの総数であり、余分なスペースは必要ありません。リンクリストをソートするためのマージソートベースのアルゴリズムについては、以下を参照してください。 O(n.log(n)) 時間。

 
こちらも参照:

単一リンクリストのマージソートアルゴリズム– C、Java、Python

 
ソース: http://cslibrary.stanford.edu/105/LinkedListProblems.pdf