LeetCode 热题 100——链表——反转链表

24. 反转链表

题目描述

给你单链表的头节点 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

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

求解

(1)迭代

js 复制代码
var reverseList = function(head) {
    // 定义两个节点,一个指向 前一个,一个指向下一个,直到遍历完
    let pre = null // 最开始,前一个是null
    let current = head // 当前节点
    while (current) {
        let next = current.next
        current.next = pre
        pre = current
        current = next
    }

    return pre
};

(2)递归

核心: 假设n_{k+1}之后的已经 反向了,那么当前节点n_k,希望它的下一个节点指向它自己:n_k.next.next = n_k

js 复制代码
var reverseList = function(head) {
    // 递归
    // 当前节点如果是n_k,那么希望n_{k+1}的下一个节点指向 n_k
    // n_k.next.next = n_k
    if (head === null || head.next === null) {
        return head
    }
    let newHead = reverseList(head.next);
    head.next.next = head
    head.next = null
    return newHead
};

补充知识点

关键字

在 JavaScript 中,关键字(Keywords)是语言本身预留的、具有特殊含义的单词。这些单词不能用作变量名、函数名、属性名或任何其他标识符。

以下是 JavaScript 中的关键字分类及完整列表:

1. 核心关键字(Core Keywords)

这些关键字在任何情况下都不能作为标识符。

关键字 说明
break 终止循环或 switch 语句
case switch 语句中的分支
catch 捕获 try...catch 中的异常
class 定义类
const 声明常量
continue 跳过循环的当前迭代
debugger 调试器断点
default switch 语句中的默认分支
delete 删除对象属性或数组元素
do do...while 循环
else if 语句的分支
export 导出模块成员
extends 类继承
finally try...catch 最终执行块
for for 循环
function 定义函数
if 条件语句
import 导入模块成员
in 判断属性是否存在于对象中
instanceof 判断对象是否为某个类的实例
new 创建对象实例
return 函数返回值
super 调用父类构造函数或方法
switch 分支语句
this 指向当前对象
throw 抛出异常
try try...catch语句块
typeof 判断数据类型
var 声明变量(函数作用域)
void 执行表达式但不返回值
while while 循环
with 扩展作用域链(不推荐使用)
yield 生成器函数暂停标志

2. 未来保留关键字 (Future Reserved Keywords)

这些关键字在当前 JavaScript 版本中可能没有被使用,但为了语言的未来扩展而预留。在严格模式('use strict')下,它们不能作为标识符。

关键字
enum
implements
interface
let
package
private
protected
public
static
yield

3. 严格模式下的额外限制

在严格模式下,以下标识符也被禁止作为变量名:

  • arguments
  • eval

总结与建议

避免使用所有关键字:即使在非严格模式下某些未来关键字可能被允许,也应避免使用,以保证代码的兼容性和可维护性。

使用合法的命名规范:

  • 变量名可以包含字母、数字、_ 和 $。
  • 必须以字母、_ 或 $ 开头。
  • 区分大小写(var 和 Var 是不同的)。
相关推荐
KaMeidebaby1 小时前
卡梅德生物技术快报|bli亲和力检测gst:告别批量跑胶:BLI实时酶切监测技术加速GST融合蛋白下游流程优化
前端·网络·数据库·人工智能·算法
alphaTao1 小时前
LeetCode 每日一题 2026/7/20-2026/7/26
算法·leetcode
圣保罗的大教堂2 小时前
leetcode 3514. 不同 XOR 三元组的数目 II 中等
leetcode
青山木5 小时前
Hot 100 ---腐烂的橘子
java·数据结构·后端·算法·leetcode·广度优先
未来之窗软件服务5 小时前
计算机考试-快速排序—东方仙盟
数据结构·算法·排序算法·仙盟创梦ide·东方仙盟
小龙报5 小时前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
txzrxz6 小时前
数论:排列数、组合数、费马小定理、逆元、同余定理
c++·算法·数论·组合数·费马小定理·逆元·排列数
xqqxqxxq6 小时前
LeetCode Hot100 双指针专项题解笔记
笔记·算法·leetcode
闪电悠米6 小时前
力扣hot100-54.螺旋矩阵-模拟边界控制详解
算法·leetcode·矩阵
变量未定义~6 小时前
虚拟节点-星石传送阵(4星)、强连通分量
数据结构·算法