一张图说明链表反转

359 阅读1分钟

去不了的桂林

正题

反转链表

之前有做过一个关于反转链表的文章。可省略过多解释,直接一张图教你如何实现链表的反转。

1.gif

核心逻辑:

  1. 定义 pre 保持上一节点指针
  2. 定义cur保持当前节点指针
  3. 定义 next 暂存下一节点指针,用来在交换完 pre 和 cur 之后,从 next 开始
  4. 交换 cur 和 pre
  5. 将 cur -> pre 形成交换
  6. 将 pre -> cur , cur -> next 指针右移准备反复

代码实现:

var reverseList = function(head) {
    let pre = null
    let cur = head
    while(cur) {
        const next = cur.next
        cur.next = pre
        pre = cur
        cur = next
    }
    return pre
};

如果不想使用 新的空间去暂存 next 的话,也可以使用 ES6 的解构赋值去实现,这样while函数里面只需要一行代码:

**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
    let pre = null
    let cur = head
    while(cur) {
        // const next = cur.next
        // cur.next = pre
        // pre = cur
        // cur = next
        [cur.next, pre, cur] = [pre, cur, cur.next]
    }
    return pre
};