题目:反转单链表 1 -2 - 3 - 4 输出 4
- 3 -2 - 1
解题:
//用递归的方法实现反转
public static int reverseList(Node list1){
//临界条件判断
if( list1== null || list1.next == null) return list1;
//递归反转子链表
Node newList = reverseList(list1.next);
// 通过list1.next 获取节点2
Node t = list1.next;
//让2的next指向2
t.next = list1 ;
//1的next指向null
list1.next = null;
//把调整好的链表返回
return newList;
}
递归优化知识点:
虽然递归可以解这题, 但是会存储重复计算, 如果节点数越大, 重复结算率就越高,这样是不可取的
所以我么可以采用java的hashmap来解决该题, 只要将计算过的结果保存起来, 下次遇到相同的计算直接调用上次的结算结果即可。
如下参考代码:
//假定数组arr[n] 已经初始化了int f(int n) {
if (n < -1) {
return n; }
}
//首先判断当前是否计算过
//用 -1 来标记计算过的状态
if(arr[n] != -1){
//计算过,直接返回
return arr[n];
}else{
//没有计算过,则递归计算,并结果保存到arr数组中
arr[n] = f(n - 1) + f(n - 2);
return arr[n];
}