スポンサーリンク

連結リスト(双方向)でpushとpopをc言語で実装

連結リスト(双方向)でpushとpopをc言語で実装してみました。

下記の記事で、連結リスト(片方向)でpush/popを実装しています。
参考:連結リスト(片方向)でpushとpopをc言語で実装(サンプルコードあり)

まずは、双方向リストを構造体で定義します。
前後のノードへのポインタをメンバ変数に持つようにします。
リストの構造体には、先頭のノードのポインタをメンバ変数に定義します。。

続いて、下記は初期化関数です。
最初のノードをmalloc()で確保します。
pNextNodeとpPreNodeにはNULLを代入します。

push関数になります。
while()で終端ノードを探索します。
新規で作成したノードのポインタを、終端ノードのpNextNodeに格納します。
また、新規で追加したノードのpPreNodeに、終端ノードだったノードへのポインタを格納します。

pop関数になります。
while()で終端ノードを探索します。
終端ノードをfree()して、終端ノードの一つ前のpNextNodeにNULLを格納します。

最後に、リストをfree()してメモリ解放する関数になります。
各ノードを先頭から解放して、最後にリストを解放します。

スポンサーリンク

サンプルコード

下記がサンプルコードになります。
main()関数では、動作確認も兼ねていたので、push/popを複数回繰り返しています。
呼び出し元でのエラーチェックは今回は行っていません。

下記が実行結果になります。

スポンサーリンク