[链表] - 代码随想录 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 后,仍能找到链表的下一个节点继续遍历。

相关推荐
切糕师学AI6 小时前
环形缓冲区(Ring Buffer / Circular Buffer)详解:原理、优势、应用与高性能实现
数据结构·环形缓冲区
WolfGang0073217 小时前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
晚枫歌F9 小时前
最小堆定时器
数据结构·算法
嫩萝卜头儿10 小时前
2 - 复杂度收尾 + 链表经典OJ
数据结构·算法·链表·复杂度
样例过了就是过了11 小时前
LeetCode热题100 分割等和子集
数据结构·c++·算法·leetcode·动态规划
木木_王11 小时前
嵌入式Linux学习 | 数据结构 (Day05) 栈与队列详解(原理 + C 语言实现 + 实战实验 + 易错点剖析)
linux·c语言·开发语言·数据结构·笔记·学习
北顾笙98011 小时前
day38-数据结构力扣
数据结构·算法·leetcode
m0_6294947311 小时前
LeetCode 热题 100-----14.合并区间
数据结构·算法·leetcode
@小码农12 小时前
2026年3月Scratch图形化编程等级考试一级真题试卷
开发语言·数据结构·c++·算法
_日拱一卒14 小时前
LeetCode:226翻转二叉树
数据结构·算法·leetcode