2015-02-21 2 views
1

Не могли бы вы объяснить мне, почему функция «print» печатает одно и то же число бесконечно в этом коде?неверный отпечаток связанного списка C++

По-видимому, связанный список построен правильно, но при отладке шаг за шагом он придерживается функции «print».

#include <iostream> 
#include <cstdlib> 
#include <ctime> 

using namespace std; 

struct num { 
    int n; 
    num* next;}; 

void add (num*&head, int size) { 
    num*newnode = new num; 
    for (int i = 0; i<size; i++) { 
     newnode->n = rand()%100; 
     newnode->next = head; 
     head = newnode;} 
} 

void print (num*head) { 
    num*temp = head; 
    while (temp != 0) { 
     cout << temp->n << endl; 
     temp = temp ->next;}} 

void del (num*&head) { 
    num*temp = 0; 
    while (head!=0){ 
     temp = head; 
     head = head->next; 
     delete temp;}} 

int main() { 
srand ((unsigned int)time(0)); 
num*head = 0; 
add (head, 10); 
print (head); 
del (head); 
cin.get(); 
cin.ignore(); 
} 
+2

Проблема в 'add' функции. Вы не создаете новые узлы. Вместо этого вы изменяете один и тот же узел и указываете на него – user7

ответ

2

Проблема в добавлении функции. Вы не создаете новые узлы. Вместо этого нужно изменить один и тот же узел и указать его самому себе.

Изменить как этот

for (int i = 0; i<size; i++) { 
     newnode = new num; //new node 
     newnode->n = rand()%100; 
     newnode->next = head; 
     head = newnode;} 
1

Вы создаете петлю в списке в add функции

newnode->next = head; 
head = newnode; 

Таким образом, есть только один узел, и его next указывает на head и head указывает на этот узел. Если вы переместите num*newnode = new num; внутри цикла, вы исправите это.

Смежные вопросы