gpt4 book ai didi

c - 缺少删除 sll 最后一个节点的情况

转载 作者:行者123 更新时间:2023-11-30 16:14:29 24 4
gpt4 key购买 nike

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

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;
}

关于c - 缺少删除 sll 最后一个节点的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57639401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com