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。
答案 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)
您有三种情况:
front
节点为null,因此您返回null。front
节点包含target
,因此您将丢弃front
并在链接节点上返回递归调用的结果。front
节点未保留target
,因此您在链接节点上执行递归调用并返回front
。在数字1中返回null,在数字3中返回非空。在数字2中你基本上再次,所以返回null或下一个节点。等等。
这意味着可以返回null。但它也可以返回非null。