一起学习LeetCode热题100道(23/100)

23.反转链表(学习)

给你单链表的头节点 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.prev 指针:用于跟踪当前节点的前一个节点,初始时设置为 null,因为反转后的链表的头节点前面没有节点。

2.curr 指针:用于遍历原始链表,初始时设置为链表的头节点 head。

二、迭代遍历链表:

1.在每次迭代中,首先保存 curr 节点的下一个节点到 nextTemp 变量中,以防丢失。

2.然后,将 curr 节点的 next 指针指向 prev,这样就完成了当前节点的反转。

3.接着,将 prev 和 curr 都向前移动一位。具体来说,prev 变成当前的 curr,而 curr 变成之前保存的 nextTemp。

三、返回新的头节点:

1.当 curr 变为 null 时,说明已经遍历完了整个链表,此时 prev 指针将指向新的头节点(即原链表的尾节点)。

2.返回 prev 指针作为反转后链表的头节点。

javascript 复制代码
var reverseList = function(head) {
    let prev = null; // 前一个节点,初始化为null  
    let curr = head; // 当前节点,初始化为头节点  
  
    while (curr !== null) {  
        let nextTemp = curr.next; // 临时保存当前节点的下一个节点  
        curr.next = prev; // 将当前节点的next指针指向前一个节点,实现反转  
        prev = curr; // 前一个节点前进到当前节点  
        curr = nextTemp; // 当前节点前进到原来的下一个节点  
    }  
  
    return prev; // 当循环结束时,prev将会是新的头节点
};
相关推荐
luj_17683 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
mCell4 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
KaMeidebaby5 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
心中有国也有家6 小时前
AtomGit Flutter 鸿蒙客户端: ChangeNotifier 模式
学习·flutter·华为·harmonyos
luj_17686 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
取地址符6 小时前
C++学习笔记(基于learn-cxx)(1)
c++·经验分享·笔记·学习
tmlx3I0816 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-6 小时前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~7 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
ysa0510307 小时前
【板子】ST表
c++·笔记·算法·板子