Я пытаюсь изучить связанные списки. Я только что написал программу, иллюстрирующую связанный список, но она, похоже, не работает. Вот код:
#include <iostream>
using namespace std;
struct node
{
int data;
node* next;
};
int main(int argc, const char * argv[])
{
node* trav;
node* root;
root = new node;
trav = root;
trav -> data = 4;
trav -> next = new node;
trav -> data = 5;
trav -> next = new node;
trav -> data = 6;
trav -> next = 0;
trav = root;
while (trav!=0) {
std::cout<<trav->data;
trav=trav->next;
}
}
Я хочу, чтобы root указывал на первый узел, но он, кажется, копирует trav
данные, как мы идем дальше в программу. Есть идеи, что случилось?
Спасибо
В этом коде:
trav = root;
trav -> data = 4;
trav -> next = new node;
trav -> data = 5;
trav -> next = new node;
вы не меняете trav
указатель, который означает, что вы перезаписываете его элементы. После создания нового узла с помощью вызова trav->next = new node;
Вы должны «перейти» к следующему узлу, вызвав:
trav = trav-> next;
Вы никогда не делаете
trav = trav -> next;
Когда вы заполните список. Вы не двигаетесь в списке, а просто продолжаете изменять корень.
Вам не хватает trav = trav -> next
после trav -> next = new node
; другими словами, вы создаете новый узел, но на самом деле никогда не «шагаете» туда.