c-删除所有值为N的节点后,指向链表的前面



以下是一个应该做三件事的函数:

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

相关内容

  • 没有找到相关文章

最新更新