• 締切済み

連結リスト 要素の入れ替え

自分には、難しい内容なので、色々教えていただけると嬉しいです。 リスト構造で、データの入れ替え・ポインタの付け替えを行っているのですが、どこのサイトを見てもどれが、参考になるのか分かりませんでした。 例えば、宣言でgFront→a1→a2→a3→a4→a5→NULLのすでに連結されたリストがあります。 先頭には、ダミー(gFront)のセルがあり、そこからたどって入れ替えていくというものです。 a1からa5の中には、数字が入っているものとします。 a2とa5の入れ替えを行うと仮定して話します。 そして、a2をpreとして、a5をnewとして、preの一つ前をprepreとし、newの1つ前をprenewとして、ひとつ前のnextを調べてポインタの付け替えを行います。 4か所のポインタの付け替え後の結果を、gFront→a1→a5→a3→a4→a2→NULLとしたいです。 swapを使ったリストの中身入れ替えではなく、ポインタの付け替えでリスト自体の入れ替えを行いたいと考えています。 この付け替えの部分がいまいちプログラムの書き方と言いますか、よく理解できていないので、教えていただけないでしょうか? 文章だけでは、分かりにくいところが多々あるかとは思いますが、宜しくお願いいたします。

みんなの回答

  • prophetok
  • ベストアンサー率44% (13/29)
回答No.1

線形連結リストの基本的な操作なので、リストの仕組みを理解していれば、簡単ですよ。 newとかprenewとか難しく考えすぎているみたい。 前のノードがpre、後のノードがnextとすると a1->next=a5; a5->pre=a1; a5->next=a3; a2->pre=a4; a2->next=NULL; 一般化する場合は、現状リンクしているノードを覚えておくことを忘れずに。

noname#89395
質問者

補足

p1というポインタを使ってたどっていくので、もっと複雑になりませんか? 入れ替えを複数回行いたいので、 a1->next=a5; のように固定して書けません・・・

関連するQ&A