我是编码初学者,正在创建一个链表(不使用类概念),但这不起作用,请帮忙。
#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;
}
答案 0 :(得分:1)
这是错误的
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));
...
在C ++程序中,没有理由不优先使用new
而不是malloc
node *temp = new node;
答案 1 :(得分:0)
malloc
。请改用new
表达式。std::unique_ptr
(尽管了解唯一指针需要了解类)。最后,问题是traverse
引用了尚未声明的标识符head
。当然,您在head
范围内有局部变量add
,但是局部变量仅存在于声明它们的(潜在)范围内。此外,add
并不是在构造链表,因为它始终对每个元素使用单独的head
。
程序性链表实现应将列表的开头作为参数:
void add(int n, node& head)
void traverse(const node& head)