移除链表元素
这节我们通过移除链表元素这个问题来开始探讨链表和递归的关系。
按照LeetCode上的要求我们在不使用虚拟头节点的时候的代码
1 | class Solution { |
现在我们加上虚拟头结点试下
1 | class Solution { |
通过上面这个 我们清楚了虚拟头结点的主要作用就是统一了头结点和其他节点的操作。达到简化逻辑的目的。
抒写自己的测试代码
上面我们写的代码可以直接放到LeetCode进行执行,但是不可以本地测试。如果我们想本地测试需要进一些编写。
1 | public class ListNode { |
我们在链表的节点类构造函数中,新增将数组变为链表的功能。
在Solution
类中进行测试
1 | public static void main(String[] args) { |
在其他题目中,我们可以按照这种思想进行编写测试。
递归的基础和递归的宏观语意
本质上递归就是将原来的问题转化为更小的同一个问题。
例如数组求和
我们将上面的过程写成代码
1 | public class Sum { |
分析一下递归的代码结构,大致分为下面两个部分
递归函数本身也是一个函数,完成一个功能。