以下是一个应该做三件事的函数:
1.删除链表中值为N(char key
)的所有节点(值始终为单字符)
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的节点后,如何在函数末尾直接指向链表的前面(它开始的地方),并返回这个指针
只需从递归中重建列表:
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;
}
}