gpt4 book ai didi

c++ - 链表的开头是零开头是什么原因? C++

转载 作者:行者123 更新时间:2023-11-28 04:52:12 26 4
gpt4 key购买 nike

#include <iostream>    

using namespace std;

struct Node {
int data;
Node* next;
};

void add(struct Node *head, int n) {
Node *newNode = new Node;
newNode->data = n;
newNode->next = NULL;
Node *cur = head;
while(cur) {
if(cur->next == NULL) {
cur->next = newNode;
return;
}

cur = cur->next;
}
}

void display(struct Node *head) {
Node *list = head;
while(list) {
cout << list->data << " ";
list = list->next;
}
cout << endl;
cout << endl;
}

int main()
{
struct Node *newHead;
struct Node *head = new Node;
int ar[]={2,5,46,7,55};
for(int i=0; i<5;i++){
add(head,ar[i]);
}
display(head);
}

输出:

0 2 5 46 7 55

链表开头为零的原因是什么?我该如何解决?我不想打印零。

如果您在我的代码中看到一些错误,请告诉我。我是编码新手。

最佳答案

main 中,您分配了一个未初始化的 Node 实例,并将指针存储在 head 中。您永远不会分配该节点的 head->data,因此该值是不确定的。同样适用于 head->next。当在 adddisplay 中读取这些值时,程序的行为是未定义的。


And how can I fix it?

首先,初始化 main 中的 head 以避免未定义的行为:

Node *head = new Node();
// ^^ these are important

然后您可以执行以下操作之一:

a) 使用 display(head->next); 而不是 display(head); 跳过第一个节点

b) 将 head 初始化为您想要的第一个值

head->data = ar[0];
for(int i=1; i<5;i++)
// ...

c) 重新设计您的 API,不要求用户单独分配第一个节点。 Remy 的回答中有更多详细信息。

关于c++ - 链表的开头是零开头是什么原因? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47932660/

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