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]