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

时间:2013-07-10 18:04:14

标签: c pointers linked-list nodes

以下是一个应该做三件事的功能:

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的节点后,如何在函数结尾处指向链表的前面(它开始的位置)并返回此指针?

1 个答案:

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