C++ C++;链接列表输出
所以我一直在尝试编写一个链表。当我调试时,或者如果我再放一条这样的打印语句C++ C++;链接列表输出,c++,linked-list,C++,Linked List,所以我一直在尝试编写一个链表。当我调试时,或者如果我再放一条这样的打印语句 intlist.add_node(7); intlist.print_list(); intlist.add_node(8); 它可以制作精美的印刷品 5 7 5 7 8 但如果我去掉那句话,它只印三个8。调试也是一样,它似乎可以工作,但如果我只是运行它就不行了。我不明白怎么了。 这是我的主要观点 int main(){ Linked_list intlist; intlist.add_node(5);
intlist.add_node(7);
intlist.print_list();
intlist.add_node(8);
它可以制作精美的印刷品
5
7
5
7
8
但如果我去掉那句话,它只印三个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;
};
和头的源文件
Linked_list::Linked_list(){
head = 0;
lenght = 0;
}
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;
temp = head;
while (temp->next != NULL){
temp = temp->next;
}
lenght++;
temp->next = newnode;
delete temp;
}
}
void Linked_list::remove_node(int data){
return;
}
int Linked_list::get_data(int index){
return 0;
}
void Linked_list::print_list(){
if (head == 0) {std::cout << "List is empty!!" << std::endl;
return;}
else{
Node* ptr = new Node;
ptr = head;
for (int i = lenght; i > 0; i--){
std::cout << ptr->data << std::endl;
ptr = ptr->next;
}
}
}
Linked_list::Linked_list(){
水头=0;
长度=0;
}
无效链接列表::添加节点(int数据){
Node*newnode=新节点;
新建节点->数据=数据;
newnode->next=NULL;
if(head==0){head=newnode;lenght=1;return;}
否则{
Node*temp=新节点;
温度=水头;
while(临时->下一步!=NULL){
温度=温度->下一步;
}
长度++;
temp->next=newnode;
删除临时文件;
}
}
无效链接的_列表::删除_节点(int数据){
返回;
}
int-Linked_-list::获取_数据(int-index){
返回0;
}
作废链接列表::打印列表(){
如果(head==0){std::cout您的add_节点函数应该是:
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;
}
}
您不需要创建新的节点
对象,因为您只需要查看引用头。delete temp
实际上删除了先前由temp
指向的地址的内容,这是列表中的最后一个元素。删除内存泄漏是很好的,但这并不能回答OP的问题。也许我需要idn当时没有得到它,但此删除肯定会中断打印,因为已删除节点的数据不再可访问。第二条注释掉的行是真正的罪魁祸首:)第一次没有看到。您的打印列表中有一个错误。为什么要分配节点,然后在下一条语句中泄漏分配的内存。