我在C中创建了一个单向链表,它具有头部和尾部指针,头部指针指向SLL的起始节点,尾部指针指向SLL的最后一个节点。我不想使用头指针遍历列表的末尾来删除节点。有没有办法让我可以使用尾指针来删除SLL的最后一个元素?使用尾指针删除单个链表的最后一个节点
以下是节点添加功能。头部和尾部发起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
@BLUEPIXY然后什么是正确的陈述? –
'Node * temp = * head; * head =(* head) - > ptr; free(temp);'如果成为'* head == NULL',那么需要将tail设置为NULL。 – BLUEPIXY