問題:ソートされたリンクリストが与えられた
1->2->3->4->5->6->7
リンクリスト内のポインタを変更して作成します
7->1->6->2->5->3->4
一定のスペースを使用します。
私は次のアルゴリズムを使用してそれを解決しようとしました:
- 高速ノードと低速ノードの2つのノードを使用して、リンクリストの中間ノードを見つけます。
リンクリストを中間ノードから逆にします。中央のノードをyとしてマークし、開始ノードをxとしてマークします。
1->2->3->7->6->5->4 x y
y =中間ノードかつy!= x.nextの場合、yとx.nextを交換します。次に、xとx.nextを交換します。
1->7->3->2->6->5->4 x y 7->1->3->2->6->5->4 x y
xを2ノード進め、yを1ノード進めます。
7->1->3->2->6->5->4 x y
ここで、if(x!= y){xとyを入れ替える}
7->1->6->2->3->5->4 x y
xを2ノード進め、yを1ノード進めます
7->1->3->2->6->5->4 x y
- yがnullになる(リンクリストの最後に到達する)か、x == yになるまで、手順4と5を繰り返します。
だから最終的に私たちは得る
7->1->6->2->5->3->4
質問:
これを行うためのより簡単な方法はありますか?