【问题标题】:delete Certain number from linked list (recursive)从链表中删除某些数字(递归)
【发布时间】:2016-10-09 03:19:54
【问题描述】:

大家好,我正在尝试创建一个删除某个数字的函数 从链表中具有此编号的所有单元格中,但我的删除功能仅删除他到达末尾的第一个单元格,然后返回到主单元格 这是我的代码:

struct num* deleteCell(struct num* point, int numdelete)
{
    struct num* tempdelete = point;
    if (point == NULL)  // found the tail and dont found any match to delete
    {
        printf("not found\n");
        return NULL;
    }
    else if (point->number == numdelete)// found one to delete
    { 
        tempdelete = point->pNext;
        free(point);
    }
    else// Just keep going 
    { 
        point->pNext = deleteCell(point->pNext, numdelete);
    }
    return tempdelete;
}

(point 是指向第一个单元格的指针,numdelete 是我要删除的数字) 感谢帮助!!!!

单独

【问题讨论】:

  • 链表不是递归算法的好容器。最好使用迭代方法来避免堆栈溢出。
  • 您必须迭代到要删除的项目。
  • @Olaf 这是我的任务,我需要以递归方式执行此算法
  • @MohammadrezaPanahi 我该怎么做?
  • 对于递归算法,想一想“我要为单个实例做什么?”这里,如果是删除号,则删除节点(将下一个节点链接到前一个节点)并递归执行下一个节点。如果不是删除号,递归执行下一个节点。如果没有下一个节点,你就完成了。拿走它,然后编码。是的,最好从结束条件检查开始。

标签: c pointers recursion linked-list bag


【解决方案1】:
struct num* deleteCell(struct num* point, int numdelete) {
  if (point == NULL) {
     return NULL;
  }

  if (point->number == numdelete) { 
    num* tempdelete = point->pNext;
    free(point);
    return deleteCell(tempdelete, numdelete);
  }

  point->pNext = deleteCell(point->pNext, numdelete);
  return point;
}

【讨论】:

  • 是的,它已经完成了 =) 但是还有一件小事,为什么你要这样做 point->pNext=(到递归)?
  • 在删除下一个节点的情况下,需要对pNext进行相应的调整
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 2021-12-20
  • 2016-07-19
  • 2020-05-14
  • 1970-01-01
  • 2012-11-06
相关资源
最近更新 更多