2016-05-30 11 views
-3

私は数時間にわたってCで自分のLinkedListを作成しようとしています。正しく動作させることができません。なぜこのコードが間違っているのかを指摘してください。実際の動作は 'main'にスクロールします。C LinkedListは動作しません

何らかの理由で、「追加」は、最後の要素だけがそこに残るように、渡されたリストを変更するように見えます。私は再帰的かつ反復的にプログラムを何度も書き直しました。結果はいつもこれのようです。

int 
main(){ 

    struct List myList; 
    myList.head = NULL; 

    printList(&myList); // empty 
    add(&myList, 1); 
    printList(&myList); // 1 -> NULL 
    add(&myList, 2); 
    printList(&myList); // 2 -> NULL, should be 1 -> 2 -> NULL 
    add(&myList, 3); 
    printList(&myList); // 3 -> NULL, should be 1 -> 2 -> 3 -> NULL 
    add(&myList, 4); 
    printList(&myList); // 4 -> NULL, should be 1 -> 2 -> 3 -> 4 -> NULL 
} 

私も手順のいずれかの画期的な論理的欠陥があったかどうかを確認するために、他の言語でプログラムを再作成しましたが、他の場所で、私はそれがすぐに動作するようになりました。

while((curr -> next) != NULL){ 
    curr = curr -> next; 
} 

これが正しいだが、その後、あなたは頭を変更している:あなたは最後の要素を探しているあなたのプログラムで

+0

ただ、 '(追加ですべての変数の列を書き込み、一枚の紙を取る)'、そして '')(追加のコードの行ごとに行を記述します。各ステップでの各変数の値は?すぐに表示されます。 –

+0

ジョハンズの返答は正しいですが、あなたのプログラムもひどく非効率です。リストの先頭に新しい要素を追加するか、リスト構造の最後のノードにポインタを格納する必要があります。それがリスト全体のポイントです。 – user31264

+1

デバッガ.......................... –

答えて

1

list -> head = malloc(sizeof(struct Node)); 
(list -> head) -> data = z; 
(list -> head) -> next = NULL; 

は、代わりに、新しい要素を作成する必要があります現在の末尾のnextポインタを変更します。

struct Node *new_data = malloc(sizeof(struct Node)); 
new_node -> data = z; 
new_node -> next = NULL; 
curr -> next = new_node; 
+0

まあ、もちろん、あなたはまったく正しいです。今私はそのエラーを見つけられないために非常に愚かだと感じています。 – nitowa

1

l種類のlあなたが頭や尾に追加するかどうか決定する必要があるようなooks ...あなたが頭に追加しようとしているようなものですが、あなたはnullよりも次の電流を作るだろう...

list -> head = malloc(sizeof(struct Node)); 
(list -> head) -> data = z; 
(list -> head) -> next = NULL; // HERE <-- next is NULL 

いうより:

list -> head = malloc(sizeof(struct Node)); 
(list -> head) -> data = z; 
(list -> head) -> next = curr; 
関連する問題