11. 反转从位置 m 到 n 的链表。
题目
给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。
示例 1
// 输入:head = [1,2,3,4,5]
// 输出:[5,4,3,2,1]
示例 2
// 输入:head = [1,2]
// 输出:[2,1]
示例 3
// 输入:head = []
// 输出:[]
提示
- 链表中节点的数目范围是 [0, 5000]
- -5000 <= Node.val <= 5000
参考答案
DETAILS
// 定义链表节点类
class ListNode {
  constructor(val, next = null) {
    this.val = val;
    this.next = next;
  }
}
// 数组转换为链表
function arrayToList(arr) {
  if (arr.length === 0) return null;
  let head = new ListNode(arr[0]);
  let current = head;
  for (let i = 1; i < arr.length; i++) {
    current.next = new ListNode(arr[i]);
    current = current.next;
  }
  return head;
}
// 反转链表函数
var reverseList = function (head) {
  let prev = null;
  let curr = head;
  while (curr) {
    let next = curr.next;
    curr.next = prev;
    prev = curr;
    curr = next;
  }
  return prev;
};
// 测试
const arr = [1, 2, 3, 4, 5];
const head = arrayToList(arr);
const reversedHead = reverseList(head);
// 打印反转后的链表
let current = reversedHead;
const result = [];
while (current) {
  result.push(current.val);
  current = current.next;
}
console.log(result); // 输出 [5, 4, 3, 2, 1]
