【发布时间】:2018-01-13 10:31:00
【问题描述】:
我在 C 中创建一个单链表,它具有头和尾指针,其中头指针指向 SLL 的起始节点,尾指针指向 SLL 的最后一个节点。我不想使用头指针遍历到列表末尾来删除节点。有没有办法让我可以使用尾指针删除 SLL 的最后一个元素?
以下是节点添加功能。 head 和 tail 初始化为 NULL。
void add_node_last(Node** head, Node** tail, int data) {
Node* new_node = (Node *) malloc(sizeof(Node));
new_node -> data = data;
new_node -> ptr = NULL;
if(*head == NULL && *tail == NULL) {
*head = new_node;
*tail = new_node;
return;
}
(*tail) -> ptr = new_node;
*tail = new_node;
}
要删除第一个节点,使用以下函数:
void del_first(Node **head) {
if(*head == NULL) {
return;
}
*head = (*head) -> ptr;
free(*head);
}
【问题讨论】:
-
顺便说一句
free(*head);是错误的。 -
@BLUEPIXY 那么正确的说法是什么?
-
Node *temp = *head; *head = (*head) -> ptr; free(temp);另外如果变成*head == NULL则需要将tail设置为NULL。 -
你能详细说明为什么错了吗?
-
更新后会破坏列表。
标签: c pointers linked-list singly-linked-list