gpt4 book ai didi

c++ - 打印元素两个链表表现得很奇怪

转载 作者:行者123 更新时间:2023-11-28 02:25:24 24 4
gpt4 key购买 nike

我用下面的代码写了一个链表。第一次打印有效,但第二次打印无效。

int main() {
Node *A, *B;


B = InsertTail(B, 2);
B = InsertTail(B, 3);
B = InsertTail(B, 8);
B = InsertTail(B, 10);

Print(B);

A = InsertTail(A, 1);
A = InsertTail(A, 5);
A = InsertTail(A, 10);
A = InsertTail(A, 12);
A = InsertTail(A, 16);

Print(A);

return 0;
}

函数 InsertTail 将第二个参数中的数据插入到列表的末尾并返回列表的 headPrint 函数打印所有元素的列表。

打印功能实现为

void Print(Node *head)
{
Node *current = head;
if(head == NULL){ return; }
while(current != NULL){
cout << current->data << endl;
current = current->next;
}
}

并且,InsertTail 实现为

Node* InsertTail(Node *head,int data)
{
Node *current = new Node, *temp = head;
current->data = data;
current->next = NULL;

if(temp==NULL){return current;}
else{
while(temp->next != NULL){ temp=temp->next;}
temp->next = current;
}
return head;
}

我试着调试它,A 的第一个值没问题,但在第二个值上,有 data = 1836017711。这是一个截图。 enter image description here

最佳答案

在调用之前,您似乎既没有初始化 A 也没有初始化 B 。从你的 Print 函数来看,我想 AB 应该用 NULL 初始化:

Node *A=NULL, *B=NULL;

如果没有初始化,我猜这是未定义的行为,任何事情都可能发生。在最简单的情况下,AB 恰好指向内存中具有随机内容的随机位置(你很幸运甚至有 B 工作)。

附言为什么在尾部插入,但只保留指向头部的指针?我建议您也保留指向尾部的指针,这样您就不会每次都遍历所有列表。

关于c++ - 打印元素两个链表表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30870959/

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