我是编码初学者,我正在创建一个链表(不使用类概念(,但这不起作用,请帮助。
#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;
- 程序会泄漏它分配的所有动态内存。始终释放您分配的所有资源。
- 永远不要在C++中使用
malloc
。请改用new
表达式。 - 不要使用裸欠指针。请改用
std::unique_ptr
(尽管理解唯一指针需要了解类(。
最后,问题是traverse
引用您尚未声明的标识符head
。当然,您在add
范围内有局部变量head
,但局部变量仅存在于声明它们的(潜在(范围内。此外,add
并没有构造链表,因为它总是为每个元素使用单独的head
。
过程链表实现应将列表的头部作为参数:
void add(int n, node& head)
void traverse(const node& head)