2つのリンクされたリストは逆になります。つまり、他のリンクされたチェーンテーブルのテールポインターは、1つのリンクリストのテールポインターから他のリンクリストに合併から逆転します。以下に、2つのリンクされたリストの反転交互のアイデアと実装コードを詳細に紹介します。
1。問題の説明
リンクAおよびb
A:1-> 2-> 3-> 4
B:a-> b-> c-> d
2つのリンクリストを交互に逆にしてください。
4-> d-> 3-> c-> 2-> b-> 1-> a
ノードタイプの定義は次のとおりです。
classNode {public node next; 2。ソースコード:
2つのAとBのリンクされたリストは、処理後にリンクリストに渡されます。
Node Reverse_Merge(Node B){// bはすべて1つのノードを持っています.next = nexta = b = nightb; ; 3、分析:
プログラムは、サイクルの前、サイクル、およびサイクルのサイクルの前に3つの部分に分割されます。
1)前のリンクリストAおよびbの処理
2)サイクル - 処理プロセスのコア処理部分はここで繰り返すことができます。赤いリンクモードを達成するために、2つの原子構造があります。
ただし、Aが特別に処理されたAにあります。Aが配置されているノードのみ、次のnull操作が必要です。
2つの方法を使用する場合、サイクル外に1本の指を置く必要があります。したがって、2で説明されている原子構造はここで使用されます。
原子構造に必要な情報
特定のサイクルに行くと、青い円の動作を仮定すると、この時点で、リンクされたリストの状態は次のとおりです。
より直感的な描画方法は次のとおりです。
3つのノード-2、3とCが含まれます赤い部分は、私たちがしたいリンク方法です。 C-> 2,3-> Cをリンクするには、それらの位置を記録するための対応するポインターがあることを知っておく必要があります。したがって、サイクルの前に、これらの3つの要素のアドレスをマスターする必要があり、同じ方法で処理した後、同じ方法で処理する必要がある原子構造を処理する必要があります。
たとえば、次のメソッドは、このサイクルで設計された3つのノードのアドレスを記録します。
a、na、およびbは、対応するノードへのポインターまたは参照を表します。
処理が完了した後、同じ方法で次の原子構造に関与するノードを記録する必要があります。
これらの割り当て操作は、サイクルの中程度のコードが上記で指定された命令に基づいていることです。さらに、nextBは、C-> Dが切断される前の前のDノードのアドレスを記録するためのコードの中間変数として定義されます。これは、Cから2が接触Dを失うためです。
3)ループ全体の前に、準備操作によってもたらされる問題を解決する
ノードAは特別すぎて、それを含めることができる適切な原子構造がないため、ノードAを処理していません。だから、私たちはそれをサイクルの外に置き、循環の準備をします。
その後、サイクルに1、2、およびBを配置できます。ここでは、1つのノードAとBのみがあり、それも個別に処理する必要があります。
4)ループ全体の後 - 最終処理
Bリンクリストが終了に達することがわかったとき、サイクルは終了します。しかし、この時点では、ハンドリングノードがあります。私たちのサイクルはこの原子構造で停止します:
最終操作として、d-> 3,4-> d-のリンクステップを手動で処理する必要があります。これは、原子構造の処理を見つける必要がないためです。
これは完全な方法ではなく、たとえば入力AとBが異なる場合、どのように処理されていないかなど、多くのことがあります。さらに、ノードデータ構造は完全に定義されていませんが、これはこの記事の焦点ではありません。
上記の詳細な分析を通じて、私は誰もが2つのリンクされたリストの代替合併の方法と実装を理解するのを支援したいと考えています。