目前我正在尝试创建一个链接列表。
这是我用来创建节点的类:
class node{
public:
int item;
node* ptr_next;
node(int new_item = 0, node* new_ptr_next = nullptr):
item(new_item), ptr_next(new_ptr_next){}
};
这是我用来向树添加节点的函数:
//Adds a node to the end of the linked list.
//by making the last node point to the new node
node append_node(const int& item, node* ptr_entry_node){
node* ptr_last_node;
node* ptr_current_node;
//Finds Last Node In List
ptr_current_node = ptr_entry_node;
while (ptr_current_node->ptr_next != nullptr){
ptr_current_node = ptr_current_node->ptr_next;
}
ptr_last_node = ptr_current_node;
//Instanciates a new node and makes the last node point to the new node
node new_node(item);
ptr_last_node->ptr_next = &new_node;
return new_node;
}
这是主程序。
int main(){
//Creates a node for the beggining of the linked list.
node entry_node;
append_node(12,&entry_node);
std::cout<<entry_node.item<<"\n";
std::cout<<entry_node.ptr_next->item<<"\n";
}
当我运行
main()
时,我收到以下输出:
0
12
这是我期望的输出。 但是,如果我将
append_node
更改为:
void append_node(const int& item, node* ptr_entry_node){
//Exact same code but no "return new_node;"
}
当我运行
main()
时,我收到以下输出:
0
-1108142424
当我再次运行程序时,输出的第二个数字发生了变化。 这不是我所期望的。
如果有人能解释为什么我需要在
return new_node;
中append_node
才能将新节点成功添加到链表中,我将非常感谢您的帮助。
Append 应该分配节点,而不是使用节点的本地实例。 我修改了一些使用new和delete的旧代码。我懒得改名字。
#include <iostream>
class node{
public:
int item;
node* next;
node(int new_item = 0, node* new_next = nullptr):
item(new_item), next(new_next){}
};
node * append_node(node* list, const int& item){
node* current;
node* ptr_new = new node(item);
if(list == nullptr) // if empty list return ptr to new node
return ptr_new;
current = list; // find end of list
while (current->next != nullptr){
current = current->next;
}
current->next = ptr_new; // append node
return list;
}
int main(){
node* list = nullptr; // empty list
node* current;
node* next;
list = append_node(list, 12); // append 2 nodes and display
list = append_node(list, 34);
std::cout << list->item <<std::endl;
std::cout << list->next->item <<std::endl;
current = list; // delete nodes in list
while (current != nullptr) {
next = current->next;
delete current;
current = next;
}
return 0;
}