前提
c言語のリスト構造の課題でどうしてもうまくいかない部分があります。
プログラム自体にエラー話出ていないのですが、出力結果が逆順に表示されてしまい、insertしたい順番とは逆にinsertされてるみたいです。正しい出力結果通りになるように訂正すべき箇所のご指摘お願いします。
実現したいこと
プログラム自体にエラー話出ていないのですが、出力結果が逆順に表示されてしまい、insertしたい順番とは逆にinsertされてるみたいです。insert関数を修正して、正しい出力結果通りになるようにしたいのですが、自分は前からinsertするinsert関数しか知らないため、連結リストの最後尾にinsertできるinsert関数を教えてください。
発生している問題・エラーメッセージ
なし
該当のソースコード
C言語
1#include <stdio.h> 2#include <stdlib.h> 3 4struct node{ 5 char element; 6 struct node *next; 7}; 8 9struct node *initlist() { 10 struct node *n; 11 n = (struct node *) malloc (sizeof (struct node) ); 12 n -> next = NULL; 13 return n; 14} 15 16void insert(struct node *p, char x) { 17 struct node *n; 18 n = (struct node *)malloc(sizeof(struct node)); 19 n -> element = x; 20 n -> next = p->next; 21 p -> next = n; 22} 23void printlist(struct node *p) { 24 if(p->next == NULL) { 25 putchar('\n'); 26 }else { 27 p = p->next; 28 putchar(p->element); 29 printlist(p); 30 putchar(p->element); 31 } 32} 33 34int main(int argc, char *argv[]) { 35 struct node *list, *head; 36 char *p; 37 if (argc<2) 38 exit(-1); 39 40 list = initlist(); 41 p = argv[1]; 42 for (; *p; p++) 43 insert(list, *p); 44 45 printlist(list); 46 printf("\n"); 47 for (; list; ) { 48 head = list; 49 list = list->next; 50 free(head); 51 } 52 return 0; 53} 54
正しい出力結果
C言語
1[]$ gcc -Wall -std=c99 -o q5-1 q5-1.c 2[]$ ./q5-1 abcde 3abcde 4edcba
自分の出力結果
C言語
1[]$ gcc -Wall -std=c99 -o q5-1 q5-1.c 2[]$ ./q5-1 abcde 3edcba 4abcde
回答1件
あなたの回答
tips
プレビュー