【发布时间】:2020-06-24 00:06:12
【问题描述】:
我不允许释放内存或分配新内存(列表已为我分配)。所以本质上我正在尝试编写一个类似的函数,
struct node* returnAndRemoveFirstNode(struct node* head)
{
struct node* returned = head;
struct node* temp = head->next;
returned->next = NULL;
head = temp;
return returned;
}
这不起作用,因为当我将返回的->next 设置为 null 时,我还将 head 的 next 设置为 null。我不知道如何解决这个问题,我相信有很多方法可以解决它,只是不知道如何解决。 对于 (1->2->3->4) 形式的列表,原始列表和返回的节点都类似于 (1->Null)
//Here is the node struct in case you need it
//I am not allowed to alter the struct..
struct node{
int data;
struct node *next;
};
【问题讨论】:
-
您需要接收指向头指针的指针,以便在删除第一个节点时重新分配它。
-
@kronickrypt 删除所有满足条件的节点和删除第一个节点是两件不同的事情。看来您不需要返回已删除的节点。你需要的是释放被移除的节点。
-
我只是用这个例子来分解问题,因为这是我没有得到正确的唯一情况。我不允许释放或分配新节点。
-
@wildplasser 谢谢你解决了我的问题。当我使用双指针修改我的解决方案时,当我需要更新双指针指向的指针时,我试图更新指向头指针的指针。
标签: c pointers linked-list dynamic-memory-allocation singly-linked-list