gpt4 book ai didi

C++链表奇怪的输出

转载 作者:行者123 更新时间:2023-11-30 01:39:59 25 4
gpt4 key购买 nike

所以我一直在尝试编写一个链表。当我调试时,或者如果我再放一个这样的打印语句时;

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;
};

还有header的源文件;

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;
}
}
}

最佳答案

你的 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 对象,因为您只是想引用 head。 delete temp 实际上删除了 temp 先前指向的地址的内容,这是列表的最后一个元素。

关于C++链表奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44421863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com