使用链接列表在堆栈上执行push操作失败

时间:2016-06-23 04:44:20

标签: c linked-list stack

我正在尝试使用单个链表创建堆栈,我的推送操作不会将数据插入链表

这是我到目前为止所尝试的,

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);

如何使推送操作有效?

3 个答案:

答案 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;
    }
}