题目

!! 题目来源:反转链表 - 力扣

分析

这个问题的思路比较简单直接:我们只需要在遍历链表的途中,将指针反转过来即可,具体示意见下图。

而具体细节我们只需要一个中间变量来保存 next,在反转节点之后,通过 next 往后遍历链表即可。

代码如下:

var reverseList = function (head) {
  let cur = head;
  let prev = null;
  while (cur) {
    let next = cur.next;
    cur.next = prev;
    prev = cur;
    cur = next;
  }
  return prev;
};
复制代码

优化

这里我们可以借助 es6 的解构赋值让代码变得更骚一点:

var reverseList = function (head) {
  let cur = head;
  let prev = null;
  while (cur) [cur.next, prev, cur] = [prev, cur, cur.next];
  return prev;
};
复制代码