もっと詳しく
リンクリストを逆にすると、リンクパスが逆になり、ヘッドがテールになり、テールがヘッドになります。 ノードの位置を入れ替えることで、これをすばやく理解できます。 このスワッピングでは、ノードの位置を左から右に、またはその逆に変更するだけです。

リンクリスト: これは、逆にしたいリンクリストです。

リンクリストを逆にした後: 以下は、上記のリンクリストを逆にした後の結果です。

上の図の例では、リンクリストを逆にすると、ヘッドノードとテールノードの位置が変わることがわかります。 現在はテールノードであるヘッドノードは、テールノードであるためヌルノードを指します。

アルゴリズムの手順

  1. mainメソッドを作成し、いくつかの必須変数を宣言します。
  2. 次に、リンクリストを作成できるメソッドを作成します。 このメソッドは、リンクリストを作成するのに役立ちます。
  3. 次のステップは、リンクリストを逆にするメソッドを作成することです。 このメソッドでは、リンクリスト全体を渡します。このメソッドは、リンクリストを逆にします。
  4. ここで、結果を逆にした後に結果を表示する別の方法が必要です。
  5. 上記のすべての方法をメインの方法に組み合わせます。

わかりやすくするために、いくつかの図形式を使用して逆リンクリストを説明します。 それでは、例から始めましょう。

以下は、逆にしたいリンクリストです。

ステップ1。 緑色のノードはヘッドノードであり、スタートアップの最初のノードを指します。

ステップ2。 次のステップでは、ヘッダーノードの横にあるnullポインターが取得されなくなるまで、リンクリスト全体をトラバースします。 そのために、次の図に示すように、次のノードに一時的な名前を割り当てます。

ステップ3。 「temporary」という名前の新しい参照ノードがあるため、nullポインターを取得しなくなるまでリンクリスト全体をトラバースするのに役立ちます。したがって、ヘッダーノードの次のリンクをnullに設定できます。これは、リンクに影響を与えません。下の図に示すようにリストします。 現在のノードの横にあるnullポインターは、前のノードと呼ばれます。

ステップ4。 ここで、一時ノードを次のノードに移動し、現在のノードを前の一時ノードに移動します。 これで、次のノードに移動しました。 また、前のノードをnullから現在のノードの前のノードだけに変更します。 これで、次の図に示すように、現在のノードから前のノードへのリンクを設定できるように、一時ノードがnullポインターまでのすべてのトラバースを処理し、前のノードを指します。

したがって、同じ手順に従い、最後に、逆リンクリストを取得します。

ステップ5

ステップ6。

ステップ7。

ステップ8。

ステップ9。

ステップ10。

ステップ11。

ステップ12。

ステップ13。

ステップ14。 このステップで、リンクリストが逆になりました。

リンクリストを逆にするC++プログラム

#include
を使用して 名前空間 std;

//ノードを作成するメソッド
構造体 ノード
{{
int 価値;
ノード *nextNodePtr;
}*nodeObject;

空所 createLinkedList((int n)。;
空所 reverseLinkedList((ノード ****nodeObject)。;
空所 画面(()。;

int 主要(()。
{{
int n、値、アイテム;

カウト<<“作成するノードの数=>:”;
cin>>n;
createLinkedList((n)。;
カウト<<「」 nリンクリストの情報: n「」;
画面(()。;
カウト<<「」 n反転後のリンクリスト n「」;
reverseLinkedList((nodeObject)。;
画面(()。;
戻る 0;
}
//このメソッドはリンクリストを作成します
空所 createLinkedList((int n)。
{{
構造体 ノード *frontNode、 *tempNode;
int 値、i;

nodeObject = ((構造体 ノード *)。malloc((のサイズ((構造体 ノード)。)。;
もしも((nodeObject == ヌル)。
{{
カウト<<「記憶を評価するのに十分ではない」;
}
そうしないと
{{

カウト<>価値;
nodeObject>> 価値 = 価値;
nodeObject>> nextNodePtr = ヌル;
tempNode = nodeObject;

にとって((=2;<=n;++)。
{{
frontNode = ((構造体 ノード *)。malloc((のサイズ((構造体 ノード)。)。;

//リンクリストにノードがない場合
もしも((frontNode == ヌル)。
{{
カウト<<「メモリを割り当てられません」;
壊す;
}
そうしないと
{{
カウト<<「ノードの情報を入力してください」<<<>価値;
frontNode>>価値 = 価値;
frontNode>>nextNodePtr = ヌル;
tempNode>>nextNodePtr = frontNode;
tempNode = tempNode>>nextNodePtr;
}
}
}
}

空所 reverseLinkedList((ノード ****nodeObject)。
{{
構造体 ノード *tempNode = ヌル;
構造体 ノード *previousNode = ヌル;
構造体 ノード *currentNode = ((*nodeObject)。;
その間((currentNode = ヌル)。 {{
tempNode = currentNode>>nextNodePtr;
currentNode>>nextNodePtr = previousNode;
previousNode = currentNode;
currentNode = tempNode;
}
((*nodeObject)。 = previousNode;
}
空所 画面(()。
{{
構造体 ノード *tempNode;
もしも((nodeObject == ヌル)。
{{
カウト<<「リンクリストは空です」;
}
そうしないと
{{
tempNode = nodeObject;
その間((tempNode = ヌル)。
{{
カウト<価値<nextNodePtr;
}
}
}

出力

作成するノードの数=>:6
ノード1の情報を入力してください(番号のみ):101
ノード2の情報を入力してください:95
ノード3の情報を入力してください:61
ノード4の情報を入力してください:19
ノード5の情報を入力してください:12
ノード6の情報を入力してください:11
リンクリストのの情報:
101 95 61 19 12 11
反転後のリンクリスト
11 12 19 61 95101

結論

そこで、逆連結リストを検討しました。 尊敬されているリンクリストの概念を図で見て、C++プログラムで同じ概念を実装しました。 リンクリストを逆にする方法は他にもいくつかありますが、これはリンクリストを逆にする非常に一般的な方法です。 問題をどのように解決したいかを決めるのはあなた次第です。 問題や時間の複雑さに焦点を合わせたいだけの場合も。

The post 逆リンクリスト(C ++) appeared first on Gamingsym Japan.