C:在列表上使用哨兵

C: using sentinels on lists

你好,我正在学习链表,我必须使用哨兵编写几个函数。我有这样的定义:哨兵是一个假元素,它是列表的第一个元素。一个空列表是一个单一的哨兵,而不是一个 NULL 指针。

我需要初始化一个空列表的哨兵

void list_init(struct list *list);

并检查列表是否为空(return true 为空)

int list_is_empty(struct list *list);

但是我完全迷路了,你能帮帮我吗,谢谢!

一个链表节点总是有下一个成员

struct list
{
    int data;
    struct list *next;
};

当您创建哨兵时,您会在 NULL 旁边进行初始化

void list_init(struct list *list)
{
    list->data = -1;
    list->next = NULL;
}


struct list *head = malloc(sizeof(struct list));
list_init(head);

现在 head 有一个 next 成员 NULL 所以你要做的就是检查 next 是否等于 NULL

int list_is_empty(struct list *list)
{
    if (list->next == NULL) return 1;

    return 0;
}

一个你添加一个节点 head->next 变为 NOT NULL 并且你会知道列表不为空。但是你必须确保你总是将头部传递给 list_functions.