在 C++ 中创建单个链表

Creating single linked list in c++

本文关键字:单个 链表 创建 C++      更新时间:2023-10-16

我是编码初学者,我正在创建一个链表(不使用类概念(,但这不起作用,请帮助。

#include<iostream>
#include<malloc.h>
using namespace std;
struct node{
int data;
node *next;
};
void add(int n){
node *head = NULL;
node *temp = (node*)malloc(sizeof(node));
temp->data = n;
temp->next = head;
head=temp;
}
void traverse(){
node *temp1 = head;
while(temp1!=NULL){
cout<<temp1->data;
temp1 = temp1->next;
}
}
int main(){
add(1);
add(2);
add(3);
traverse();
return 0;
}

这是错误的

void add(int n){
node *head = NULL;
node *temp = (node*)malloc(sizeof(node));
...

如果要以这种方式制作链表,则需要将head创建为全局变量,否则每次调用add时都会创建并销毁它。

node *head = NULL;
void add(int n){
node *temp = (node*)malloc(sizeof(node));
...

而且真的没有理由不使用new而不是C++程序中的malloc

node *temp = new node;
  1. 程序会泄漏它分配的所有动态内存。始终释放您分配的所有资源。
  2. 永远不要在C++中使用malloc。请改用new表达式。
  3. 不要使用裸欠指针。请改用std::unique_ptr(尽管理解唯一指针需要了解类(。

最后,问题是traverse引用您尚未声明的标识符head。当然,您在add范围内有局部变量head,但局部变量仅存在于声明它们的(潜在(范围内。此外,add并没有构造链表,因为它总是为每个元素使用单独的head

过程链表实现应将列表的头部作为参数:

void add(int n, node& head)
void traverse(const node& head)