###前提・実現したいこと
Cでノードを使った線形リストを作っており、元からあるリストを逆順に表示するための関数を作っていました。
###発生している問題・エラーメッセージ
逆順に表示するための関数が、想定通りに動作しません。
現在のソースコードでは、例えばリストが{123}であれば{321}と表示したいのに{1}とだけ表示されてしまいます。
###該当のソースコード
lang
1node_t nodeReverse(node_t **ndPtrPtr) 2{ 3 int i = 0; 4 node_t *Pro_ptr1; 5 node_t *Pro_ptr2; 6 while(*ndPtrPtr != NULL){ 7 if(i == 0){ 8 Pro_ptr1 = *ndPtrPtr; 9 ndPtrPtr = &((*ndPtrPtr) -> next); 10 Pro_ptr1 -> next = NULL; 11 }else if(i != 0){ 12 Pro_ptr2 = *ndPtrPtr; 13 ndPtrPtr = &((*ndPtrPtr) -> next); 14 Pro_ptr2 -> next = Pro_ptr1; 15 Pro_ptr1 = Pro_ptr2; 16 } 17 i++; 18 } 19} 20
###関連するソースコード
ノードの定義や、ノードを作成、リストを表示する関数も付記します。 ●ノードの定義 typedef int data_t; typedef struct nodetag { data_t data; struct nodetag *next; }node_t; ●ノードの作成 node_t *nodeNew(data_t dt, node_t *nxt) { node_t *ndPtr; ndPtr = malloc(sizeof(node_t)); if(ndPtr == NULL){ return NULL; }else{ ndPtr -> data = dt; ndPtr -> next = nxt; return ndPtr; } } ●リストにノードを後から加える関数 int nodeAppend(node_t **ndPtrPtr, data_t dt) { node_t *ndPtr; ndPtr = nodeNew(dt, NULL); if(ndPtr == NULL){ return FAILURE; } while(*ndPtrPtr != NULL){ ndPtrPtr = &((*ndPtrPtr) -> next); } *ndPtrPtr = ndPtr; return SUCCESS; } ●リストの表示 void listPrint(node_t *ndPtr) { printf("{"); while(ndPtr != NULL){ printf("%d", ndPtr -> data); ndPtr = ndPtr -> next; } printf("}\n"); }
###試したこと
ノードごとにある次のノードを示すポインタ変数、nextの値を変更するために、ポインタ変数を二つ作りました。
現在いるノードのアドレスと一つ前のアドレスをそれぞれに格納。それらをそれぞれのノードのnextに逆順に格納していくことで、課題を実現しようとしました。
###補足情報(言語/FW/ツール等のバージョンなど)
使用開発環境:BCC Developer 1.2.21
###最後に
機能をうまく活用できず、分かりにくい表示で最初投稿してしまいました。
申し訳ありません。
回答2件
あなたの回答
tips
プレビュー