リンクリスト: これは、逆にしたいリンクリストです。
リンクリストを逆にした後: 以下は、上記のリンクリストを逆にした後の結果です。
上の図の例では、リンクリストを逆にすると、ヘッドノードとテールノードの位置が変わることがわかります。 現在はテールノードであるヘッドノードは、テールノードであるためヌルノードを指します。
アルゴリズムの手順
- mainメソッドを作成し、いくつかの必須変数を宣言します。
- 次に、リンクリストを作成できるメソッドを作成します。 このメソッドは、リンクリストを作成するのに役立ちます。
- 次のステップは、リンクリストを逆にするメソッドを作成することです。 このメソッドでは、リンクリスト全体を渡します。このメソッドは、リンクリストを逆にします。
- ここで、結果を逆にした後に結果を表示する別の方法が必要です。
- 上記のすべての方法をメインの方法に組み合わせます。
わかりやすくするために、いくつかの図形式を使用して逆リンクリストを説明します。 それでは、例から始めましょう。
以下は、逆にしたいリンクリストです。
ステップ1。 緑色のノードはヘッドノードであり、スタートアップの最初のノードを指します。
ステップ2。 次のステップでは、ヘッダーノードの横にあるnullポインターが取得されなくなるまで、リンクリスト全体をトラバースします。 そのために、次の図に示すように、次のノードに一時的な名前を割り当てます。
ステップ3。 「temporary」という名前の新しい参照ノードがあるため、nullポインターを取得しなくなるまでリンクリスト全体をトラバースするのに役立ちます。したがって、ヘッダーノードの次のリンクをnullに設定できます。これは、リンクに影響を与えません。下の図に示すようにリストします。 現在のノードの横にあるnullポインターは、前のノードと呼ばれます。
ステップ4。 ここで、一時ノードを次のノードに移動し、現在のノードを前の一時ノードに移動します。 これで、次のノードに移動しました。 また、前のノードをnullから現在のノードの前のノードだけに変更します。 これで、次の図に示すように、現在のノードから前のノードへのリンクを設定できるように、一時ノードがnullポインターまでのすべてのトラバースを処理し、前のノードを指します。
したがって、同じ手順に従い、最後に、逆リンクリストを取得します。
ステップ5。
ステップ6。
ステップ7。
ステップ8。
ステップ9。
ステップ10。
ステップ11。
ステップ12。
ステップ13。
ステップ14。 このステップで、リンクリストが逆になりました。
リンクリストを逆にするC++プログラム
を使用して 名前空間 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.