私はcで4つの異なるレコードを保持するために二重リンクリストを使用しています。二重リンクリストにノードを追加すると、最初のノードを除くすべてのノードが削除されるのはなぜですか?
二重リンクリスト用のスペースを作成する際に問題があります。 3つ以上のノードを追加しようとすると、最初のノードを除くすべてのノードが失われ、最初と最後のノードのデータが表示されます。私は2番目から最後までノードを見ることができません。私はノード間のリンクを変更しようとしましたが、動作しませんでした。ここに私のコードです。
struct node {
char name[100];
char surname[100];
char roll[100];
char department[100];
struct node *next;
struct node *prev;
};
struct node *first_oto = NULL, *last_oto = NULL, *l;
void insert() {
int i, counter = 1;
first_oto = (struct node*)malloc(sizeof(struct node));
first_oto->prev = NULL;
first_oto->next = NULL;
printf(" %d- Name:", counter);
scanf("%s", first_oto->name);
printf(" %d-Surname", counter);
scanf("%s", first_oto->surname);
printf(" %d-Number", counter);
scanf("%s", first_oto->roll);
printf(" %d-Department", counter);
scanf("%s", first_oto->department);
first_oto->next = NULL;
for (i = 1; i < n; i++) {
counter++;
l = (struct node*)malloc(sizeof(struct node));
printf(" %d-Name:", counter);
scanf("%s", l->name);
printf(" %d-Surname:", counter);
scanf("%s", l->surname);
printf(" %d-Number:", counter);
scanf("%s", l->roll);
printf(" %d-Department:", counter);
scanf("%s", l->department);
printf("\n");
l->next = NULL;
l->prev = first_oto;
first_oto->next = l;
}
私のコードは、最初のノードのレコードを取っています。私のプログラムはループのために動作しますが、それは他のノードを取りますが、最後のノードだけを追加します。それを修正するために私は何をすべきですか?
これはコンパイルされますか? 'counter +'はどうしていると思いますか? –
'first_oto-> next = l;' 'first_oto-> next'の前の値を消去します。 – chux
あなたの最後のノードの前のノードがすべて前のノードではなく最初のノードであるようです。 –