質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

Q&A

解決済

1回答

900閲覧

c言語の連結リストで出力結果が逆順になってしまう対処法

ShitoKanataSama

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

0グッド

1クリップ

投稿2022/08/08 08:28

編集2022/08/08 09:06

前提

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2022/08/08 08:39

insert で先頭に追加してるので…。
jimbe

2022/08/08 09:08

方法は二つ。 正順にinsertする。 逆順にprintする。
guest

回答1

0

自己解決

皆さまのご指摘と他の質問サイトからの回答により、以下のようにinsert関数を変更したらうまく出力できました。ご協力ありがとうございます。

c言語

1void insert(struct node *p, char x) { 2 struct node *n; 3 n = (struct node *)malloc(sizeof(struct node)); 4 n -> element = x; 5 n -> next = NULL; 6 while(p->next != NULL) 7 p = p->next; 8 p->next = n; 9}

投稿2022/08/08 09:17

編集2022/08/08 09:18
ShitoKanataSama

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問