C语言 缺少删除 sll 最后一个节点的大小写



所以我正在学习如何使用linnked列表,我正在尝试编写一个函数来删除单向链表的最后一个节点。

typedef struct Node {
int data;
struct Node *link;
} Node;
typedef struct List {
Node* head;
int number_of_nodes;
} List;
void list_delete_rear(List* list)
{
Node *temp, *prev;
temp=list->head;
prev=temp;
while(temp->link!=NULL)
{
prev=temp;
temp=temp->link;
}
prev->link=NULL;
}

当列表中有多个元素时,这工作正常。但是当只有一个元素时,它不会被删除。 示例输出:

//printing original list elements:
102 101 100
//printing after using the function two times
102
//after using the function again
102

我很抱歉,如果这个问题听起来真的很幼稚,但我真的无法理解出了什么问题。在这一点上,这太令人沮丧了,只要我能弄清楚问题是什么,我什至不介意投几票反对票

需要双重间接

void list_delete_rear(List* list)
{
Node **temp;
if (!list->head) return;
// Get pointer to pointer to last node
for (temp=&list->head; temp[0]->next; temp=&temp[0]->next)
;
// Free node pointed to by temp
free(temp[0]);
*temp = NULL;
--list->number_of_nodes;
}

最新更新