1

所以我只是想知道这个将新值推送到链表堆栈顶部的推送函数是否正确

void push(node** hd, int v){
node temp;
temp = (node*)malloc(sizeof(node));
temp -> val = v;
temp -> next = *hd;
*hd = temp;

}

提前致谢!

另外我想知道如何制作一个弹出函数,将最近推送的值从堆栈中弹出。

顺便说一句,结构代码看起来像这样......

typedef struct nodeStruct
{
int val;
struct nodeStruct* next;
}node;

typedef node* list;
4

1 回答 1

2

不要定义指针类型。他们令人困惑。定义一个普通类型并显式取消引用它。这是您在没有指针类型的情况下尝试做的事情。

#include <stdlib.h>
#include <stdio.h>

typedef struct nodeStruct
{
    int val;
    struct nodeStruct *next;
} node;

static void push(node **head, int v)
{
    node *temp = malloc(sizeof(node));
    temp->val = v;
    temp->next = *head;
    *head = temp;
}

int main(int argc, char **argv)
{
    (void) argv;
    (void) argc;
    node *list = NULL;

    for (int i=0; i<10; ++i) {
        push(&list, i);
    }
    for(node *l = list; l != NULL; l = l->next) {
        printf("%d ", l->val);
    }
    printf("\n");
    return 0;
}

请注意,您应该检查malloc. 换句话说,malloc可以返回NULL,这应该被处理——留给你。

于 2012-11-05T23:38:58.850 回答