递归问题一直是一个看似简单实则上手很难的方法。很多人(包括我在内)常常无法把具体问题抽象成递归函数,找不到终止条件,不知道函数应该做什么,不清楚要抽象出的逻辑什么...
本文尝试用leetcode中的简单链表问题,来一步步阐述递归的思考过程。
首先要明白,递归是反复调用自身的过程。递归分为递推和回归两步,递推和回归的中间过渡为终止条件。我们不必考虑每一步递归究竟在做什么,只需要把问题上升一个高度,不去关注细节,只关注宏观逻辑。即可知递归一大关键要素:抽象。
题目:
思考如何递归往往要考虑三个条件:
- 终止条件是什么?
- 本层做什么?
- 返回什么值?
根据题目,终止条件是当当前节点为null或当前节点的next为null。
要回答本层做什么,首先要把链表抽象出来,忽略其中细节。
反转链表,即当前节点和下一节点的指向顺序改变:
cur.ne