# 题目描述

输入一个链表,返回其反转后的链表

例如:

输入 2 -> 3 -> 4
输出 4 -> 3 -> 2

# 解题思路

  1. 应该定义一个变量用于存储链表的头部节点, 以头部节点为基准节点;
  2. 将基准节点的下一个节点挪到头部作为头节点;
  3. 当基准节点的nextnull,则其已经成为最后一个节点,链表已经反转完成;

# coding

/**
 * Definition for singly-linked list.
 */
function ListNode(val) {
    this.val = val;
    this.next = null;
}
function reverseList(list) {
    let currentNode = null // 定义一个变量用于存储当前节点
    let head = list // 定义一个变量用于存储链表的头部节点
    while (list && list.next) {
        currentNode = list.next // 将当前节点设置为链表的next
        list.next = currentNode.next // 链表的next为当前节点的next
        currentNode.next = head // 再将当前节点的next指向链表的头部节点
        head = currentNode // 链表的头部节点设置为当前节点
    }
    return head
}

测试代码

let list = { val: 2, next: { val: 3, next: { val: 4, next: null } } }
reverseList(list)
{ val: 4, next: { val: 3, next: { val: 2, next: null } } }
阅读全文