[链表] - 代码随想录 206. 反转链表

链表 - 代码随想录 206. 反转链表

题目要求

反转一个单链表。

实现代码

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur = head;  // 当前遍历节点
        ListNode pre = null;  // 前驱节点 (反转后将成为后继)
        while (cur != null) {
            ListNode next = cur.next; // 暂存后继节点
            cur.next = pre;    // 反转指针:当前节点指向前驱
            pre = cur;         // 前驱节点后移
            cur = next;        // 当前节点后移
        }
        return pre; // 循环结束时,pre指向新链表的头节点
    }
}

算法说明

该实现采用迭代法反转链表,核心步骤如下:

  1. 初始化指针

    • cur 指向当前待处理节点(初始为头节点 head)。
    • pre 指向 cur 的前驱节点(初始为 null,表示链表开头)。
  2. 遍历与反转

    • 循环遍历链表,直至 curnull
    • 在每次循环中:
      • 暂存 cur 的下一个节点 (next)。
      • cur.next 指向 pre(完成当前节点的反转)。
      • pre 移动到 cur 位置(更新前驱节点)。
      • cur 移动到暂存的 next 位置(移动到下一个待处理节点)。
  3. 返回结果

    • 循环结束时,curnullpre 指向原链表的最后一个节点,即反转后新链表的头节点,返回 pre

关键点 :通过暂存 next 节点,确保在修改 cur.next 指向 pre 后,仍能找到链表的下一个节点继续遍历。

相关推荐
Darling噜啦啦1 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠2 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾2 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8212 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q2 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒2 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
疯狂成瘾者3 天前
Java 集合 LinkedList 详解:链表结构、常用方法和队列使用
java·开发语言·链表
WL学习笔记3 天前
单项不带头不循环链表
数据结构·链表
小糯米6013 天前
JS 数组
数据结构·算法·排序算法
小欣加油3 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展