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

相关推荐
皮皮哎哟4 小时前
数据结构:嵌入式常用排序与查找算法精讲
数据结构·算法·排序算法·二分查找·快速排序
堕2745 小时前
java数据结构当中的《排序》(一 )
java·数据结构·排序算法
2302_813806225 小时前
【嵌入式修炼:数据结构篇】——数据结构总结
数据结构
Wei&Yan6 小时前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code
long3166 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
张张努力变强9 小时前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
wWYy.9 小时前
数组快排 链表归并
数据结构·链表
李斯啦果9 小时前
【PTA】L1-019 谁先倒
数据结构·算法
Mr Xu_1 天前
告别硬编码:前端项目中配置驱动的实战优化指南
前端·javascript·数据结构
czxyvX1 天前
017-AVL树(C++实现)
开发语言·数据结构·c++