gpt4 book ai didi

c - 删除链表最后一项

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:09 24 4
gpt4 key购买 nike

我正在写一个程序,这个程序的一部分是一个函数,它必须删除 LinkedList 中的最后一个元素:

struct node *del_the_last(struct node *head) {
struct node *h1 = head;
if (head == NULL) {
return NULL;
}
while (head->next != NULL) {
head = head->next;
}
free(h1);
return head;
}

给定值:

16, 7, 8, 12, 13, 19, 21, 12

我的程序返回

[12]

但是它应该删除它。所以我再次尝试,这是我得到的最接近的结果:

struct node *del_the_last(struct node *head) {
struct node *h1 = head;
int flag = 1;
if (head == NULL) { return NULL; }
while (flag == 1) {
if (head->next->next == NULL) {
flag = 0;
head->next = NULL;
free(h1);
return head;

}
else {
head = head->next;
}

}

}

给定输出:

2,7,1,8

我的程序返回:

1

此外,我确认该值:

8

通过尝试返回返回错误的 head->next 从 LinkedList 中删除

我知道我将如何继续解决这个问题,但我不确定如何将其转换为 C 代码。

这是我的程序需要做的:

  1. 将指向节点头部的指针(*head)存入一个变量
  2. 让程序正常运行,即上面的代码
  3. 将 head 赋值给第 1 步中的指针值
  4. 自由指针
  5. 返回头部

我相信这是需要做的,但我不确定如何去做

请告诉我正确的方法

最佳答案

正如@achal 所指出的,如果在执行 head->next->nexthead->nextNULL 可能会出现问题>。

struct node* del_the_last(struct node* head){
struct node* curr = head;
// Check if head is NULL
if(head == NULL){
return NULL;
}
// Special case if head is the only node in the list
if(head->next == NULL){
free(head);
return NULL;
}
while(curr != NULL){
/* Check if curr->next is not NULL. If it's not,
see if curr->next->next is NULL, if so, then you
know that curr->next is the last node.
*/
if(curr->next != NULL && curr->next->next == NULL){
free(curr->next);
/* Important to NULL the link to the delete node
so as to signify that now curr->next is the last node
*/
curr->next = NULL;
}else{
curr = curr->next;
}
}
return head;
}

关于c - 删除链表最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548686/

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