# 206.ReverseLinkedList
// https://leetcode.com/problems/reverse-linked-list/
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
// 方法1: 三指针遍历链表
// 先将头元素的next指向空
// 用 next 变量存储第三个元素避免链表断掉
var reverseList1 = function (head) {
let newHead = null
let current = head
let pre = null
while (current) {
let next = current.next
if (!next) {
newHead = current
}
current.next = pre
pre = current
current = next
}
return newHead
};
// 方法2:递归
// 元素进行交替处理的思路与1类似,实现方式不同
var reverseList2 = function (head) {
return reverseHelper(null, head)
};
var reverseHelper = function (pre, current) {
if (!current) {
return current
}
let next = current.next
current.next = pre
pre = current
if (!next) {
return current
}
current = next
return reverseHelper(pre, current)
}