C Linked List with Sentinel - 获取对节点的访问

C Linked List with Sentinel - Getting Access to nodes

我正在努力完成这项任务(实施链表)。我试图建立一个所谓的哨兵,这会让它变得更容易。我的问题是,如何访问实际元素?我试图打印根值 (44),但我只得到了奇怪的值。我假设这些是内存地址(例如 6893440)。

#include<stdio.h>

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

struct node** init() {
    struct node **l;
    l = malloc(sizeof(struct node**));
    *l = NULL;
    return l;
}

void insert(struct node** l, int val) {
    struct node* p;
    if(*l == NULL) {
        p = malloc(sizeof(struct node));
        p->val = val;
        p->next = *l;
        *l = p;
    }
}

void main() {
    struct node* list;
    list = init();
    insert(list, 44); // create a (root)node with value 44
    printf("%d", list->val); // e.g. 6893440
}

非常感谢您的帮助。

您应该将列表声明为指向节点的双指针。

struct node** list;

然后你可以用

访问第一个节点的值
(*list)->val

更多信息:

在 C 中的列表等数据类型的实现中,我们经常使用 2 个 typedef 来帮助提高代码的可读性并消除大量星号和符号。它们是:

typedef struct node* ListNode;
typedef ListNode* List;

通过这样做,您可以通过以下方式简单地声明一个列表:

List list;

请注意,通过适当替换 struct node*struct node**,列表函数的实现也变得更具可读性。