C链表推送功能,只是检查这是否正确

时间:2012-11-05 23:09:30

标签: c list pointers linked-list stack

所以我只是想知道这个推送功能是否正确,将一个新值推送到顶部的链表是否正确

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

}

提前致谢!

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

结构代码顺便说一下......

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

typedef node* list;

1 个答案:

答案 0 :(得分: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,应该处理它 - 留给你。