2017-12-03 4 views
-3

リンクリストに生成された乱数を埋め込んだときに問題が発生しました。リストの出力は常に空です。リンクされたリストをユーザーが入力するn個の要素で埋める必要があります。リンクリストに乱数を正しく挿入する方法

私はチュートリアルの1つに従っていましたが、すべて同じでしたが、私は何かが恋しくなるかもしれないと思います。あなたの助けに感謝します。

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


void FirstEl(Node *&first, Node *&last, int number) 
{ 
    Node *list = new Node; 
    list->number = number; 
    list->next = NULL; 
    first = list; 
    last = list; 
}; 

bool isEmpty(Node *first) 
{ 
    if (first == NULL) 
    { 
     return true; 
    } 
} 

void Insert(Node *&first, Node *&last, int number) 
{ 
    if (isEmpty(first)) 
    { 
     FirstEl(first, last, number); 
    } 
    else { 
     Node *list = new Node; 
     list->number = number; 
     list->next = NULL; 
     last->next = list; 
     last = list; 

    } 
} 

void ShowList(Node *current) 
{ 

    if (isEmpty(current)) 
    { 
     cout << "List is empty\n"; 
    } 
    else { 

     cout << "List: \n\n"; 

     while (current != NULL) 
     { 
      cout << current->number << "\n"; 
      current = current->next; 
     } 
    } 

} 

int main() 
{ 

int menu = 0, n = 0, number; 

    Node *first = NULL; 
    Node *last = NULL; 
    cout << "Amount of element in List: "; 
    cin >> n; 

    srand(time(NULL)); 

    for (int i = 0; i < n; i++) 
    { 
     number = (rand() % 10000 + 100); 
     Insert(first, last, number); 

    } 
    ShowList(first); 
} 
+1

あなたの 'isEmpty'関数は、リストが空でなければ何も明示的に返しません。 (良いコンパイラはこれを警告する必要があります)。その場合、デフォルトのブール値が返されます。この値は「真」と表示されます。したがって、リストは常に空であるように見えます。 – Beta

+1

'IsEmpty'は常に何かを返す必要があります。さもなければあなたのプログラムは未定義です。条件付きのものを複雑にする代わりに 'return first == NULL;'を書いてください。 – molbdnilo

+1

@Betaデフォルト値を返しません。未定義です。 – molbdnilo

答えて

1

あなたは条件が存在しない場合にはreturn falseisEmptyに機能を追加するのを忘れ。

関連する問題