递归思路
问题:反转以head为头的链表。子问题:反转以head.next为头的链表。
递归函数:输入一个节点head,将「以head为起点」的链表反转,并返回反转之后的头结点。
问题与子问题之间的连接:
base case:head==null即没有元素返回null;head.next==null即仅有一个元素返回head。
代码
var reverseList = function(head) {
if(head==null) return null;
if(head.next==null) return head;
let last = reverseList(head.next);
head.next.next = head;
head.next = null;
return last;
};
迭代思路
迭代
代码
var reverseList = function(head) {
if(head==null) return head;
let pre = null;
let curr = head;
let nxt = curr.next;
while(curr!=null){
nxt = curr.next;
curr.next = pre;
pre = curr;
curr = nxt;
}
return pre;
};