我正在尝试使用单个链表创建堆栈,我的推送操作不会将数据插入链表
这是我到目前为止所尝试的,
typedef struct element {
int data;
struct element *next;
}node;
推送方法
void push(node *root, int data) {
if(root == NULL) {
root = (node *) malloc (sizeof(struct element));
root->data = data;
root->next = NULL;
}
else {
node *temp = (node *) malloc (sizeof(struct element));
temp->data = data;
temp->next = root;
root = temp;
}
}
在我的主要方法中,我没有malloc
编辑头部指针,
这就是我称之为推送方法的方式,
push(head, data);
如何使推送操作有效?
答案 0 :(得分:3)
root
指针在push
函数中被修改。此值不会传播到main
。一种方法是返回root
指针。
node* push(node *root, int data) {
if(root == NULL) {
root = (node *) malloc (sizeof(struct element));
root->data = data;
root->next = NULL;
}
else {
node *temp = (node *) malloc (sizeof(struct element));
temp->data = data;
temp->next = root;
root = temp;
}
return root;
}
在主要内容中,您需要将其称为
head = push(head, data);
答案 1 :(得分:1)
您的story.spec.ts
值是一个指针,但地址是按值传递,这意味着如果您修改地址,则会有无副作用超出职能范围。
使用:
root
能够修改root
的值和
void push(node **root, int data )
答案 2 :(得分:0)
我认为这是有问题的代码行:
root = temp;
您正在将名为node*
的本地root
分配给另一个名为node*
的本地temp
,但此分配并非#34;坚持"在push()
函数之外。为了使它坚持下去,你可以解除引用如下:
*root = *temp;
完整代码:
void push(node *root, int data) {
if (root == NULL) {
root = (node *) malloc (sizeof(struct element));
root->data = data;
root->next = NULL;
}
else {
node *temp = (node *) malloc (sizeof(struct element));
temp->data = data;
temp->next = root;
*root = *temp;
}
}