У меня есть код, который, кажется, работает, но я не могу получить значения, хранящиеся в связанном списке между первым и последним узлами, указатели между ними пропущены? И разыменования эти пропускаются указатель дает мне Segfault, вот кодСвязанный список с помощью класса
#include<iostream>
#include <new>
using namespace std;
class list{
int value;
list* next;
public:
list(int a=0, list* b=0) {value=a;next=b;}
//~list() {delete next;}
void newnode(int a, list* tmp) {
tmp->next=new list;
tmp=tmp->next;
cout<<"Address of next: "<<tmp<<'\n';
tmp->value=a;
}
void printlist (list* regist){
list* tmp;
tmp=regist;
cout<<tmp->value<<'\n';
while(tmp->next != 0){
tmp=tmp->next;
cout<<tmp->value<<'\n';
cout<<"Address of next: "<<tmp<<'\n';
}
}
};
int main() {
int first;
cout<<"Enter value for origin: \n";
cin>>first;
list* root=new list(first);
list* tpo=root;
cout<<"How many numbers to add? \n";
int choice;
cin>>choice;
int num;
while(choice) {
cout<<"Enter value: \n";
cin>>num;
root->newnode(num, tpo);
choice--;
}
cout<<"Do you want me to show you these values, type 1 for yes and 0 for no: \n";
cin>>choice;
if(choice) {
root->printlist(root);
}
}
- На печать значения почему это пропустить эти указатели (узлы) между ними?
- Являются ли промежуточные узлы указаными на уничтоженные? Если это так, комментируя деструктор, нужно сделать трюк, верно?
Что я делаю неправильно?
С одной стороны, вы не используете согласованный отступ. Поэтому никто не имеет большого шанса прочитать ваш код. –
'root-> newnode (num, tpo);' никогда не обновляет 'root' или' tpo', поэтому каждое новое значение заменяет предыдущее –
Спасибо @FredLarson, я буду учитывать это, извините. –