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.
你好,我正在学习链表,我必须使用哨兵编写几个函数。我有这样的定义:哨兵是一个假元素,它是列表的第一个元素。一个空列表是一个单一的哨兵,而不是一个 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.