链表的天然递归性
2019-04-07 本文已影响0人
xin激流勇进
/**
* leetcode 203
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
* <p>
* 删除链表中等于给定值 val 的所有节点。
* <p>
* 示例:
* <p>
* 输入: 1->2->6->3->4->5->6, val = 6
* 输出: 1->2->3->4->5
*/
class Solution3 {
public ListNode removeElements(ListNode head, int val) {
/**
* 链表的天然递归性
* 1 将链表拆成更小的链表 则最小的链表为null
* 2 判断链表头是否满足条件 再做相关操作
*
*/
if (head == null) {
return null;
}
/*
ListNode res = removeElements(head.next, val);
if (head.val == val) {
return res;
} else {
head.next = res;
return head;
}*/
head.next = removeElements(head.next, val);
/*
if (head.val == val) {
return head.next;
} else {
return head;
}*/
return head.val == val ? head.next : head;
}
public static void main(String[] args) {
int[] a = {2, 2, 3, 4, 2, 3, 2};
ListNode listNode = new ListNode(a);
System.out.println(listNode);
ListNode listNode1 = new Solution3().removeElements(listNode, 2);
System.out.println(listNode1);
// ListNode curNode = listNode;
//
// while (curNode != null) {
// System.out.println(curNode.val);
// curNode = curNode.next;
// }
}
}
public class Sum {
public static int sum(int[] arr) {
return sum(arr, 0);
}
private static int sum(int[] arr, int l) {
// 最基本的问题 如果索引与数组长度相等 说明数组中没有元素了
if (l == arr.length) {
return 0;
} else {
int x = sum(arr, l + 1);
int res = arr[l] + x;
return res;
}
}
public static void main(String[] args) {
int[] a = {1, 3, 5, 8, 10};
System.out.println(sum(a));
}
}