2017-10-10 9 views
0

私はリンクされたリストを学び始めていて、それを使いこなしていましたが、問題に遭遇しました。実際に比較するためにデータメンバーにアクセスする方法がわかりませんでした。私のコードでは、ユーザーに成績の入力を促し、-1を入力すると入力が完了したことを知らせます。私の最初の考えは、scanfで行ったようにデータを取得するためにポインタをノードに向けることでしたが、整数へのポインタを比較することはできません。リンクリストからデータメンバーを比較する方法はありますか?また、他のエラーを指摘しても、私はリンクされたリストをあまりよく知らないので、同様に評価されるでしょう。必ず確認してください)一時変数にリンクされたリストからデータセクションを比較するにはどうすればよいですか?

2を使用 -

1)リストに直接スキャンしないでください:あなたのコードの問題の数があり

int main() { 
    struct Node 
    { 
     int grade; 
     struct Node *next; 
    }; 

    struct Node *head; 
    struct Node *first; 
    struct Node *temp = 0; 
    first = 0; 

    while (****** != -1) {  //This is what I need the data from linked list for 
     head = (struct Node*)malloc(sizeof(struct Node)); 
     printf("Enter the grade: \n "); 
     scanf("%d", &head -> grade); 
     if (first != 0) { 
      temp -> next = head; 
      temp = head; 
     } 
     else 
     { 
      first = temp = head; 
     } 
    } 
} 
+0

スカイ、リンクリスト(あるいはその他の複雑な構造体)を学ぶときは、8.5x11の紙と鉛筆を引き出し、それらをリンクするノードとノードポインタを描画します。小さな例4-5のノードをとり、 'add'、' del'、 'find'などの関数を使って参考にして、リンクとループを正しいものにします。インスピレーションを期待して画面を無限に見ているよりはるかに時間がかかります。 –

答えて

0

:私は、次のコードを持っていますリターンは

3)変数を初期化していることを確認し、すなわち頭値

ような何か試してみてください:

struct Node 
{ 
    int grade; 
    struct Node *next; 
}; 

int main() { 

    struct Node *head = NULL; 
    struct Node *temp; 
    int data; 

    while (1) 
    { 
     printf("Enter the grade: \n "); 
     if (scanf("%d", &data) != 1) 
     { 
      // Illegal input 
      exit(1); 
     } 
     if (data == -1) break; // Stop the loop 

     temp = malloc(sizeof *temp); // Allocate new element 
     if (temp == NULL) 
     { 
      // Out of mem 
      exit(1); 
     } 
     temp -> next = head; // Insert new element in the front of list 
     temp -> grade = data; 
     head = temp;   // Move the front (aka head) to the new element 
    } 

    // .... add code that uses the list 

    return 0; 
} 
関連する問題