gpt4 book ai didi

c++ - 为什么打印单向链表时有一个虚拟节点?

转载 作者:行者123 更新时间:2023-11-27 22:57:22 27 4
gpt4 key购买 nike

为什么我的代码打印了一个额外的节点(垃圾值)?我的代码有什么问题吗?让我如何解决它。

void push(node **head_ref,int value)  //function to insert a new node on front of the list
{
node *new_node=(node*)malloc(sizeof(node));
new_node->data=value;
new_node->next=*head_ref;
*head_ref=new_node;
}

void printll(node *head) //function to print the list
{
node *temp = head;
while(temp!=NULL)
{
printf("%d ",temp->data);
temp=temp->next;
}
}

实际输出:
45 88 24 34 77 0

预期输出:
45 88 24 34 77


完整代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cassert>

using namespace std;

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

void push(node **head_ref,int value)
{
node *new_node=(node*)malloc(sizeof(node));
new_node->data=value;
new_node->next=*head_ref;
*head_ref=new_node;
}

void printll(node *head)
{
node *temp = head;
while(temp!=NULL)
{
printf("%d ",temp->data);
temp=temp->next;
}

}

int main()
{
node *head= (node*)malloc(sizeof(node));
push(&head,77);
push(&head,34);
push(&head,24);
push(&head,88);
push(&head,45);
printll(head);
printf("\n");
return 0;
}

最佳答案

代替这个定义

node *head= (node*)malloc(sizeof(node));

你应该简单地写

node *head = NULL;

node *head = nullptr; // C++

否则你的程序有未定义的行为,因为分配给头部的节点没有初始化。

此外,如果它是 C++ 程序,您应该使用运算符 new 而不是 C 函数 malloc。例如函数 push 看起来像

void push( node * &head_ref, int value )
{
head_ref = new node { value, head_ref };
}

并称呼为

push( head, 77 );

考虑到您还必须编写一个函数来释放列表的所有分配内存。

关于c++ - 为什么打印单向链表时有一个虚拟节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31491648/

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