リスト構造を双方向リスト構造に書き換えたいです
C言語初心者です。以下のリスト構造を双方向リストに書き換えたいです。
構造体にstruct transcript *prvs;を追加するのはいいとして、その後どのように変更したらよいでしょうか。関数printingdudeのprvs版を追加し、メイン部でprintingdude_prvs(Z)をすればよいでしょうか。詳しい方、お手数ですがご教示頂きたいです。。
#include <stdio.h>
#include <stdlib.h>
typedef struct transcript {
int no;
struct transcript *next;
} tra;
void printingdude(tra *x) {
if (x == NULL) return;
printf("%d",x->no);
if (x->next != NULL) {
printf(", ");
printingdude(x->next);
} else {
printf("\n");
}
return;
}
void free_noud(tra *x) {
while (x != NULL) {
tra *t = x->next;
free(x);
x = t;
}
return;
}
tra* nnoud(int v, tra* c) {
tra *x = (tra *) malloc(sizeof(tra));
if (!x) {
printf("\ncan't allocate memory for a new node");
exit(EXIT_FAILURE);
}
x->no = v;
x->next = c;
return x;
}
int main() {
tra *Z = NULL;
for (int n = 10; n>0; n--) {
printingdude(Z);
Z = nnoud(n, Z);
}
printingdude(Z);
free_noud(Z);
return 0;
}
お礼
返事が遅くなりました。 Vectorを利用することにしました。 設計の問題は残ったままですけれど。 ありがとうございます。