对于两道简单的递归题的小总结
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val=0, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
class Solution {
public ListNode ReverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = ReverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
}
public 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;
}
}
规律:
1)结束递归的条件都是该问题的特殊情况
2)判断条件一般在引用的递归函数的后面
3)引用递归函数的地方是迭代没结束情况的赋值操作