在C ++中创建单个链表

时间:2018-09-05 13:08:27

标签: c++

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

#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;
}

2 个答案:

答案 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)

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

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

程序性链表实现应将列表的开头作为参数:

void add(int n, node& head)

void traverse(const node& head)