在 C++ 中创建单个链表
Creating single linked list in 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;
}
这是错误的
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)
相关文章:
- 在 C++ 中创建单个链表
- 使用unique_ptr插入单个链表的位置
- 如何在单个链表中交换两个节点的位置,只修改指针
- 尝试从单向链表C++中删除单个节点时出现读取访问冲突
- 是否可以创建带有索引但没有指针的单个链表?
- 结构内具有更多数据类型的单个链表
- 从单个链表中按值删除
- 单个链表,节点插入最低到最高节点值的问题
- C++ 删除单个链表中的节点
- 将单个链表分成两半
- c++ 访问单个链表中的特定值
- 在单个链表中擦除和插入线程安全吗
- 单个链表中的 C++ 插入节点
- 我如何使用C ++以相反的顺序打印此单个链表中的元素
- 如何在单个链表C++中找到链表的第一个值
- 按顺序遍历单个链表
- 使用递归在单个链表中查找第n到最后一个节点
- 使用单个how循环从给定的单个链表中打印最后第三个元素
- 从单个链表中弹出堆栈的c++实现
- 如何在单遍历中找到单个链表的中间节点(如果链表的长度未给定)