当前位置: 首页 > news >正文

LeetCode算法题(Go语言实现)_31

题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

一、代码实现

func reverseList(head *ListNode) *ListNode {
    var prev *ListNode  // 前驱节点初始化为nil
    current := head     // 当前节点从头节点开始
    
    for current != nil {
        nextTemp := current.Next  // 临时保存下一个节点
        current.Next = prev       // 反转指针方向
        prev = current            // 前驱指针后移
        current = nextTemp        // 当前指针后移
    }
    return prev  // 返回新头节点
}

二、算法分析

1. 核心思路
  • 指针逆向:通过三指针(prev/current/nextTemp)遍历链表,逐节点反转指针方向
  • 原地修改:无需额外存储空间,仅通过修改指针实现反转
2. 关键步骤
  1. 初始化指针prev初始化为nilcurrent指向头节点
  2. 保存后继节点:用nextTemp暂存current.Next防止断链
  3. 指针反转:将current.Next指向prev完成局部反转
  4. 指针后移prevcurrent同步后移处理下一个节点
3. 复杂度
指标说明
时间复杂度O(n)单次遍历所有节点
空间复杂度O(1)仅需三个指针变量

三、图解示例

在这里插入图片描述

四、边界条件与扩展

1. 特殊场景验证
  • 空链表:直接返回nil
  • 单节点链表:保持原样返回
  • 双节点链表:1→2 反转为 2→1
2. 多语言实现
# Python递归法实现
def reverseList(self, head: ListNode) -> ListNode:
    if not head or not head.next:
        return head
    p = self.reverseList(head.next)
    head.next.next = head
    head.next = None
    return p
// Java双指针法
public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode nextTemp = curr.next;
        curr.next = prev;
        prev = curr;
        curr = nextTemp;
    }
    return prev;
}

五、总结与扩展

1. 核心创新点
  • 三指针黄金法则:prev/current/nextTemp组合实现高效反转
  • 数学归纳证明:局部反转的正确性保证全局正确
2. 扩展应用
  • 双向链表反转:需额外处理prev指针
  • K个一组反转:递归+迭代组合(LeetCode 25)
  • 回文链表检测:快慢指针+局部反转(LeetCode 234)
3. 工程优化方向
  • 内存预分配:Go切片预分配容量减少扩容开销
  • 并发安全:添加读写锁支持多线程环境操作

相关文章:

  • 要做个卖东西网站怎么做东莞seo外包公司
  • web网站开发技术培训课程
  • 北京网站建设模板主题工厂管理培训课程
  • 杭州网站推广公司百度搜索排名规则
  • 用家里的电脑做网站服务器郑州seo优化顾问
  • 商务网站建设与维护域名交易域名出售
  • 基于LSTM的文本分类2——文本数据处理
  • 数据流和重定向
  • 250405-VSCode编辑launch.json实现Debug调试Open-WebUI
  • 数据库原理
  • [题解]2025HDU春季联合(五) - 小凯逛超市
  • JAX、Flax 和 PyTorch 之间的类比关系
  • 【doris】在线事务处理
  • Chapter07_图像压缩编码
  • 苍穹外卖Day2
  • 文件操作(C语言)
  • 蓝桥云客---蓝桥速算
  • 网络安全L2TP实验
  • 对状态模式的理解
  • 14.2linux中platform无设备树情况下驱动LED灯(详细编写程序)_csdn
  • kubeadm部署 Kubernetes(k8s) 高可用集群 V1.28.2
  • 日志统计(双指针)
  • Chrome开发者工具实战:调试三剑客
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第六讲)
  • 新版pycharm如何实现debug调试需要参数的python文件
  • 【CSS】样式与效果