一、思路链接
迭代思路:https://www.bilibili.com/video/BV1Af4y1m7Ct
递归思路: https://www.bilibili.com/video/BV1qE411p77p?from=search&seid=4521842156214548664&spm_id_from=333.337.0.0
二、具体题目
https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/
三、具体代码
1、迭代做法:
var reverseList = function(head) {
// 需要定义三个指针: pre current next
let pre = null;
let cur = head;
while(cur !== null) {
let next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
};
2、递归做法:
//递归法实现
var reverseList = function(head) {
if(head === null || head.next === null) {
return head;
}
let res = reverseList(head.next);
head.next.next = head;
head.next = null;
return res;
};
3、完整代码(迭代法):
function ListNode(val) {
this.val = val;
this.next = null;
}
function createList(n) {
let head = null;
while(n) {
let tempNode = new ListNode(n);
tempNode.next = head;
head = tempNode;
n--;
}
return head;
}
let head = createList(3);
console.log(head);//1->2->3
function getReverseList(head) {
let pre = null;
let current = head;
while(current !== null) {
let nextNode = current.next;
current.next = pre;
pre = current;
current = nextNode;
}
return pre;
}
let res = getReverseList(head);
console.log(res);//3->2->1