C 删除所有值为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 =

下面是一个函数,它应该做三件事:

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 = 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;
  }
}

在每次插入/删除操作时保持保存/更新。