C 删除所有值为N的节点后,是否指向链表的前面?
下面是一个函数,它应该做三件事: 1.删除链表中值N(C 删除所有值为N的节点后,是否指向链表的前面?,c,pointers,linked-list,nodes,C,Pointers,Linked List,Nodes,下面是一个函数,它应该做三件事: 1.删除链表中值N(char key)的所有节点(值始终为单个char字符) 2.返回链接列表的标题 3.所有这些都必须递归完成 node* deleteN(node* head, char key) { node* prev; node* cur; if (head == NULL) return NULL; prev = head; cur =
char key
)的所有节点(值始终为单个char字符)
2.返回链接列表的标题
3.所有这些都必须递归完成
node* deleteN(node* head, char key)
{
node* prev;
node* cur;
if (head == NULL)
return NULL;
prev = head;
cur = head->next;
if (head->data == key && head->next != NULL)
{
node* temp = head;
head = temp->next;
free(temp);
}
if (cur->data == key && cur->next == NULL)
{
free(cur);
prev->next = NULL;
}
head->next = deleteN(head->next, key);
return head;
}
我的问题是我可以很好地删除节点,正如您所看到的,如果节点是列表中的最后一个节点,我有一个特殊情况。然而,当我返回head时,head并没有指向任何东西,当我尝试使用链接列表执行其他操作时,会导致崩溃
我的问题是:删除所有值为N的节点后,如何让head指向函数末尾链表的前面(它的起始位置),并返回该指针?只需从递归中重建链表即可:
node* deleteN(node* head, char key)
{
if (head == NULL)
return NULL;
node* tail = deleteN(head->next, key);
if (head->data == key) {
free(head);
return tail;
} else {
head->next = tail;
return head;
}
}
在每次插入/删除操作时保持保存/更新。