所以我一直在尝试编写链表。当我调试或如果我再添加一个这样的打印语句;
getChildren()
它的打印效果很好;
intlist.add_node(7);
intlist.print_list();
intlist.add_node(8);
但是,如果我删除该声明,它只打印三个八。同样适用于调试,它似乎有效,但如果我只是运行它没有。我不明白什么是错的。 这是我的主要内容;
5
7
5
7
8
头;
int main(){
Linked_list intlist;
intlist.add_node(5);
intlist.add_node(7);
intlist.print_list();
intlist.add_node(8);
intlist.print_list();
return 0;
}
标头的源文件;
class Linked_list{
public:
Linked_list();
void add_node(int data);
void remove_node(int data);
int get_data(int index);
void print_list();
struct Node {
int data;
Node* next;
};
Node* head;
int lenght;
};
答案 0 :(得分:3)
你的add_node函数应该是:
void Linked_list::add_node(int data) {
Node* newnode = new Node;
newnode->data = data;
newnode->next = NULL;
if (head == 0) {
head = newnode;
lenght = 1;
return;
} else {
//Node* temp = new Node;
Node *temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
lenght++;
temp->next = newnode;
//delete temp;
}
}
您不需要创建新的Node
对象,因为您只想参考头部。 delete temp
实际上会删除temp
之前指向的地址内容,这是您列表中的最后一个元素。