以下是一个应该做三件事的功能:
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;
}
我的问题是我可以删除节点就好了,如你所知,如果节点是列表中的最后一个节点,我就有一个特殊情况。但是,当我回头时,当我尝试用链表做其他事情时,头部指向任何东西并导致崩溃。
我的问题是:在删除所有值为N的节点后,如何在函数结尾处指向链表的前面(它开始的位置)并返回此指针?
答案 0 :(得分:0)
只需从递归中重建列表:
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;
}
}