算法薄弱,每天一道算法题,突破自己
题目
反转一个单链表,使用迭代和递归两种方法
示例:
输入: 1->2->3->4->5->null
输出: 5->4->3->2->1->null
解析
迭代解析:
创建三个变量pre,cur,next代表上一个,当前,下一个。
每次迭代将指向交换
var reverseList1 = function(head) {
// 迭代
let cur = head;
let pre = null;
while (cur != null) {
const next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
递归解析:注意使用了尾递归
var reverseList2 = function(head) {
// 递归
if (head === null || head.next === null) return head;
head = reverse(null, head);
return head;
}
function reverse(pre, cur) {
if (!cur) return pre;
const next = cur.next;
cur.next = pre;
return reverse(cur, next);
}