0

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

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 的节点后,如何在函数末尾指向链表的前面(它开始的地方),并返回这个指针?

4

1 回答 1

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;
  }
}
于 2013-07-10T18:31:34.747 回答