递归可不可以这样理解
来源: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回答
-
head.next = removeElement(head.next, val) 这句话可能已经改变了链表。
因为,removeElement(head.next, val)返回的可能不再是head.next原来的节点,所以,head.next可能已经改变了。(所以我们重新赋值)
但是,head还没有动。在当前函数中,通过return head.val == val ? head.next : head;,决定了当前的这个函数调用中的head,是否留在整个链表中:)
继续加油!:)
112019-07-05
相似问题