递归

 

一、递归

 


 

 

二、链表天然的递归性

 


 

 

三、递归解决LeetCode中203号问题(删除链表中的节点)

删除链表中等于给定值 val 的所有节点。

示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

 1 class Solution4 {
 2 
 3     public ListNode removeElements(ListNode head, int val) {
 4 
 5         if(head == null)
 6             return head;
 7 
 8         ListNode res = removeElements(head.next, val);
 9         if(head.val == val)
10             return res;
11         else{
12             head.next = res;
13             return head;
14         }
15     }
16 
17     public static void main(String[] args) {
18 
19         int[] nums = {1, 2, 6, 3, 4, 5, 6};
20         ListNode head = new ListNode(nums);
21         System.out.println(head);
22 
23         ListNode res = (new Solution4()).removeElements(head, 6);
24         System.out.println(res);
25     }
26 }
 1 public class ListNode {
 2 
 3     public int val;
 4     public ListNode next;
 5 
 6     public ListNode(int x) {
 7         val = x;
 8     }
 9 
10     // 链表节点的构造函数
11     // 使用arr为参数,创建一个链表,当前的ListNode为链表头结点
12     public ListNode(int[] arr){
13 
14         if(arr == null || arr.length == 0)
15             throw new IllegalArgumentException("arr can not be empty");
16 
17         this.val = arr[0];
18         ListNode cur = this;
19         for(int i = 1 ; i < arr.length ; i ++){
20             cur.next = new ListNode(arr[i]);
21             cur = cur.next;
22         }
23     }
24 
25     // 以当前节点为头结点的链表信息字符串
26     @Override
27     public String toString(){
28 
29         StringBuilder s = new StringBuilder();
30         ListNode cur = this;
31         while(cur != null){
32             s.append(cur.val + "->");
33             cur = cur.next;
34         }
35         s.append("NULL");
36         return s.toString();
37     }
38 }

 

 

 


 


 

四、递归调用是有代价的 

 


 

五、更多和链表相关的话题 

 

posted @ 2018-07-10 16:57  小小工匠  阅读(177)  评论(0编辑  收藏  举报