このコードを図で解説していただけませんか。図を書いて見たのですが、
どこか解釈が間違っているのかうまくいきません。
workがどこか、pが指している(A)リンクとの関係がよくわかりません。
図はgHead,p,work,tempを書いて、リンクは
A->B->C->Dとしました。workをどこにするかが、分かっていないのかもしれません。
よろしくおねがいいたします。
コード /* リストを逆順にする。 */ void reverse_list(void) { struct LinkedList_tag* p = gHead.next; struct LinkedList_tag* work = NULL; struct LinkedList_tag* tmp; while( p != NULL ){ /* この後、p->next を書き換えるので退避しておく */ tmp = p->next; /* 1つ前の要素を p->next に設定 */ /* "1つ前の要素" とは先頭から末尾へ向かう流れの中でのことを言っており、 逆順になった後のことを考えると、"次の要素" のことを言っている。 初回は何もないので NULL になっている */ p->next = work; /* 現在の注目要素を保存 */ /* これは、次のループにおいては "1つ前の要素" になる */ work = p; /* 最初に退避させておいた p->next を次の注目要素として復帰させる */ p = tmp; } /* 最終的な work は、逆順になった後の先頭要素であるから、 ダミーの先頭要素の nextポインタとして設定する */ gHead.next = work; }
循環双方向リストは投げ出したのか?
いいえ、投げ出していません。もう一度リストを復習していて、分からないところが出てきたのでしつもんしています。図を見ているんですがよくわからないのですが。今日は時間がないので、明日見ますのでよろしくお願いいたします。
解決しました
回答3件
あなたの回答
tips
プレビュー