使用递归从双链表中删除元素

问题描述 投票:0回答:1

我想从双向链表中删除一个元素,但是我需要使用递归。我写函数,但是不起作用。有人可以告诉我我在哪里弄错了吗?

int deleteNode(struct dll_node **front, int data){
    if((*front) == NULL){
        return 0;
    }

    if(data == (*front)->data){
        int tmp = (*front)->data;
        (*front)->next = (*front)->prev;
        (*front)->prev = (*front)->next;
        free(*front);
        return tmp;
    }
    deleteNode((*front)->next, data);
}

c recursion data-structures doubly-linked-list
1个回答
0
投票

有几个问题

  • 您将数据保存在tmp中,什么也没做
  • 您没有正确更新列表
  • 您的递归调用不会赋予第一个参数正确的权限(必须为deleteNode(&(*front)->next, data);,实际上您必须为return,请注意它是终端,因此您也可以使用循环]
  • 如果两个测试都为假,则缺少返回值

可以是:

int deleteNode(struct dll_node **front, int data){
  if((*front) == NULL){
    return 0;
  }

  if(data == (*front)->data){
    struct dll_node * d = *front;

    if (d->prev == NULL) {
      if ((*front = d->next) != NULL)
        (*front)->prev = NULL;
    }
    else if ((d->prev->next = d->next) != NULL)
      d->next->prev = d->prev;

    free(d);
    return data;
  }
  return deleteNode(&(*front)->next, data);
}
© www.soinside.com 2019 - 2024. All rights reserved.