javascript实现单链表的反转

###题目描述
反转一个单链表
示例

输入 1 -> 2 -> 3 -> 4 -> 5 -> null
输出 5 -> 4 -> 3 -> 2 -> 1 -> null

进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

思路:
循环遍历每个节点:

  • 记录当前节点的下一个节点
  • 将当前节点指向当前节点的前一个节点
  • 当前节点的前一个节点移到当前节点
  • 当前节点移到当前节点的下一个节点
    整个函数返回链表的新的头节点
    如下图所示
    单链表反转思路图

javascript对单链表的结构构造如下:

1
2
3
4
function linkNode(val) {
this.val = val;
this.next = null;
}

整体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function (head) {
let pre = null;
let next = null;
while (head) {
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}

注意: 本来打算用node转数组然后用数组reverse写的,但是在代码中需要返回node格式的数据,所以在执行代码中报错。如下

1
2
3
4
5
6
7
8
9
var reverseList = function (head) {
let result = [];
while (head) {
result.push(head);
head = head.next;
}
result = result.reverse();
return result;
}

这种怎么说呢,可能思路可以,但是不符合题目要求。