递归删除链接列表中所有出现的项目

时间:2018-02-10 19:31:12

标签: java recursion linked-list

public static Node deleteAll(Node front, String target){
    if (front == null){ return null;}
    if (front.data.equals(target)){
        return deleteAll(front.next,target);
    }
    front.next=deleteAll(front.next,target);
    return front;
}

我试图通过这个解决方案,但这让我感到困惑。为什么它总是以null结果,因为在结束前面将等于null。

2 个答案:

答案 0 :(得分:3)

在考虑这些问题时,最好是拿笔和纸画一些东西并在高层次上思考

例如
...............
输入
列表:[3] - [2] - [5] - 空 - 目标:2
................

First call =>结果

deleteAll(N[3], 2) => [3]
但接下来是deleteAll(N[2], 2)
List = [3]-deleteAll(N[2], 2)

第二次电话

deleteAll(N[2], 2) => deleteAll(N[5], 2)
下一节点现在跳过2
List = [3]-deleteAll(N[5], 2)

第三次电话

deleteAll(N[5], 2) => [5]
但接下来是deleteAll(null,2)
List = [3]-[5]-deleteAll(null, 2)

Lat调用返回null

列表最终清洁,没有2s
List = [3]-[5]-null

答案 1 :(得分:0)

您有三种情况:

  1. 原始front节点为null,因此您返回null。
  2. 原始front节点包含target,因此您将丢弃front并在链接节点上返回递归调用的结果。
  3. 原始front节点未保留target,因此您在链接节点上执行递归调用并返回front
  4. 在数字1中返回null,在数字3中返回非空。在数字2中你基本上再次,所以返回null或下一个节点。等等。

    这意味着可以返回null。但它也可以返回非null。