本文主要是介绍从力扣[203]理解递归思想,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文旨在通过使用递归方法的使用来进一步了解递归思想
class Solution {public ListNode removeElements(ListNode head, int val) {if (head == null) {return head;}head.next = removeElements(head.next, val);return head.val == val ? head.next : head;}
}
既然要使用递归算法,那么就要对于递归有一定的了解:
递归的三个特点
- 有终止条件
- 自身调用
- 从上往下解决问题
“有终止条件”
在本题中,终止条件就是head == null。
一个节点接一个节点地往后判断,当后移一位时节点变为null时,说明已经到链表末尾了。递归结束,
“自身调用”与“从上到下”
对于本题中 removeElements(ListNode head, int val) 方法的含义是:获取-对于给定的头节点为head的链表,删除节点值为val的节点后-的新的头节点
对于第一个节点来说,以它为头节点的链表经过删除后的新的头节点要么是它本身,要么是它后面一长串链表的头节点。
即 removeElements(head.next, int val)
于是我们就达到了“自身调用”和“从上到下”的要求
代码解析
public class LC01 {public class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) { this.val = val; }ListNode(int val, ListNode next) { this.val = val; this.next = next; }}class Solution {public ListNode removeElements(ListNode head, int val) {//终止条件if (head == null) {return head;}//自身调用head.next = removeElements(head.next, val);//如果head的节点值为val,那么新的头节点为head.next,否则为headreturn head.val == val ? head.next : head;}}}
这篇关于从力扣[203]理解递归思想的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!