- 反向遍历链表
- 翻转链表
- 合并两个排序的链表
0、基础
基本思想,是把规模较大的一个问题,分解成规模较小的多个子问题去解决,而每一个子问题又可以继续拆分成多个更小的子问题。
最重要的一点就是假设子问题已经解决了,现在要基于已经解决的子问题来解决当前问题;或者说,必须先解决子问题,再基于子问题来解决当前问题。
【A】----依赖---->【B】----依赖---->【C】
我们的终极目的是要解决问题A,那么三个问题的处理顺序如下:
开始处理问题A;
由于A依赖B,因此开始处理问题B;
由于B依赖C,开始处理问题C;
结束处理问题C;结束处理问题B;结束处理问题A
总结:栈的核心思想是递归,递归过程返回的顺序是前进顺序的逆序。
一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归多用 if,选择结构。每次都要判断,层层递进,每次都调用这个函数。看起来清晰但消耗空间大
事实上,链表非常适合递归,因为我们在使用链表的时候都是使用指针,而不像数组那样直接使用一个内存块,因为递归的风险,也就是栈溢出可以避免