递归可不可以这样理解

来源:5-4 链表的天然递归结构性质

Astrogladiator

2019-07-05

比如这个链表中去重的问题,我的理解是:
//用js来写下
function removeElement(head, val){
if(!head)
return null;
//保存head的下一个元素的对象,这个对象是待删除的状态,其实这里还没有对链表做任何实质性质的改变
head.next = removeElement(head.next, val)
//这个阶段才是改变链表状态的阶段,其实这个过程我的想象是从链表的最后一个元素开始比较,因为之前的状态都被保存了,所以每一次向前的返回都可以检查,和循环的检查的方向正好相反。
return head.val == val ? head.next : head;
}

写回答

1回答

liuyubobobo

2019-07-05

head.next = removeElement(head.next, val) 这句话可能已经改变了链表。


因为,removeElement(head.next, val)返回的可能不再是head.next原来的节点,所以,head.next可能已经改变了。(所以我们重新赋值)


但是,head还没有动。在当前函数中,通过return head.val == val ? head.next : head;,决定了当前的这个函数调用中的head,是否留在整个链表中:)


继续加油!:)

1
1
Astrogladiator
非常感谢!老师说的很在理,有些细节忽略了,受教了
2019-07-05
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程