リンクリストを使用して20までカウントしようとしています。私は2つの機能を持つコードを書きました。リンクされたリストにノードを追加する関数と、全体を印刷する関数。しかし、それは無限ループであり、私はなぜそれがわからないのですか?20にカウントされたリンクリスト
私は何回もデバッグを試みましたが、その機能を追加しても、おそらくプリントリストは決してヌルにならず、それでは終わりなく印刷されていると思いますか?私は、追加機能は、ノードを正しく実装していないと思うが、私はどのように修正するか分からない。
struct node
{
int number;
struct node *next;
};
typedef struct node NODE;
これがメインで、機能が追加callesとI(0-20)のリストと一緒にそれを渡します。
は、これが私の構造体です。
int main(){
int i, size=20;
struct node* mylist = malloc(sizeof(struct node));
mylist->number = NULL;
mylist->next = NULL;
for(i=0;i<size;i++){
mylist = add(mylist,i);
}
printList(mylist);
return 0;
}
add関数は、渡されたデータとしてtempを取り込み、最後にリンクされたリストを反復処理します。私は、whileループで(& & iter->ネクスト>数<数)を奪うとき、それはそれでしか出力しない、それは無限ループを持っている
struct node* add(struct node *first, int number){
struct node* temp;
struct node* iter;
temp= malloc(sizeof(struct node));
temp->number=number;
temp->next=NULL;
if(first==NULL)
return temp;
iter=first;
while(iter->next!=NULL && iter->next->number < number){
iter=iter->next;}
temp->next=iter->next;
iter->next=temp;
return first;
}
これは私がprintlist機能です信じて正しいですが、私は問題がノードの追加機能にあると思う。
struct node* printList(struct node *mylist){
struct node *helpptr;
helpptr = mylist;
while (helpptr != NULL){
printf("%d", helpptr->number);
helpptr = helpptr->next;
}
return 0;
}
はあなたが
malloc()
経由で割り当てられ、初期化されていないバッファ内の値を使用して
未定義の動作を呼び出し、事前
印刷ループのwhile条件を 'helpptr-> next!= NULL'から' helpptr!= NULL'に変更してください。それ以外の場合、リスト内の最後の項目の番号は印刷されません。関数のパラメータは参照ではなく値によって呼び出されるため、新しいポインタ変数を作成する代わりに 'myList'を使用することができます。 – jboockmann
ありがとう、ありがとう!私は一度だけそれ以上の印刷を得ることを修正します – Kris
あなたのメイン関数のintにNULLを割り当てることはできません。コンパイルの警告が表示されます。これに関する修正については、私の答えを参照してください;-) – jboockmann