feat: 反转链表(206)
This commit is contained in:
parent
333aec6eaa
commit
0adc54836f
106
leetcode/简单/反转链表.js
Normal file
106
leetcode/简单/反转链表.js
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
删除排序链表中的重复元素(LeetCode83)206. 反转链表
|
||||||
|
简单
|
||||||
|
|
||||||
|
相关标签
|
||||||
|
相关企业
|
||||||
|
给你单链表的头节点 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* function ListNode(val, next) {
|
||||||
|
* this.val = (val===undefined ? 0 : val)
|
||||||
|
* this.next = (next===undefined ? null : next)
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 思路1
|
||||||
|
// const reverseList = function (head) {
|
||||||
|
// if (!head || !head.next) return head; // 如果链表为空或只有一个节点,直接返回
|
||||||
|
|
||||||
|
// const stack = []; // 创建一个栈
|
||||||
|
|
||||||
|
// // 遍历链表,将节点依次压入栈中
|
||||||
|
// let current = head;
|
||||||
|
// while (current !== null) {
|
||||||
|
// stack.push(current);
|
||||||
|
// current = current.next;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const newHead = stack.pop(); // 取出栈顶节点作为新链表的头节点
|
||||||
|
// let newCurrent = newHead;
|
||||||
|
|
||||||
|
// // 依次弹出栈中的节点,连接成新的链表
|
||||||
|
// while (stack.length > 0) {
|
||||||
|
// newCurrent.next = stack.pop();
|
||||||
|
// newCurrent = newCurrent.next;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// newCurrent.next = null; // 尾节点的 next 指针置空,确保新链表的结束
|
||||||
|
|
||||||
|
// return newHead; // 返回新链表的头节点
|
||||||
|
// };
|
||||||
|
|
||||||
|
// 思路2 (迭代法)
|
||||||
|
|
||||||
|
// const reverseList = function(head) {
|
||||||
|
// let prev = null;
|
||||||
|
// let current = head;
|
||||||
|
// while (current !== null) {
|
||||||
|
// const nextTemp = current.next;
|
||||||
|
// current.next = prev;
|
||||||
|
// prev = current;
|
||||||
|
// current = nextTemp;
|
||||||
|
// }
|
||||||
|
// return prev;
|
||||||
|
// };
|
||||||
|
|
||||||
|
// 思路3 (递归法)
|
||||||
|
import { LinkListNode as ListNode } from '../../list/index.js';
|
||||||
|
|
||||||
|
const reverseList = function (head) {
|
||||||
|
if (head == null || head.next === null) return head;
|
||||||
|
const rList = reverseList(head.next);
|
||||||
|
head.next.next = head;
|
||||||
|
head.next = null;
|
||||||
|
return rList;
|
||||||
|
};
|
||||||
|
// 示例链表:1 -> 2 -> 3 -> 4 -> 5
|
||||||
|
const node1 = new ListNode(1);
|
||||||
|
const node2 = new ListNode(2);
|
||||||
|
const node3 = new ListNode(3);
|
||||||
|
const node4 = new ListNode(4);
|
||||||
|
const node5 = new ListNode(5);
|
||||||
|
node1.next = node2;
|
||||||
|
node2.next = node3;
|
||||||
|
node3.next = node4;
|
||||||
|
node4.next = node5;
|
||||||
|
|
||||||
|
// 反转链表
|
||||||
|
const reversedHead = reverseList(node1);
|
||||||
|
|
||||||
|
// 打印反转后的链表
|
||||||
|
let current = reversedHead;
|
||||||
|
while (current !== null) {
|
||||||
|
console.log(current.val);
|
||||||
|
current = current.next;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user