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

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

题目

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

一、代码实现

func reverseList(head *ListNode) *ListNode {var prev *ListNode  // 前驱节点初始化为nilcurrent := 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 headp = self.reverseList(head.next)head.next.next = headhead.next = Nonereturn 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切片预分配容量减少扩容开销
  • 并发安全:添加读写锁支持多线程环境操作

http://www.mrgr.cn/news/97301.html

相关文章:

  • C++自学笔记---数组和指针的异同点
  • 【计算机网络】Linux配置SNAT/DNAT策略
  • Android学习总结之算法篇五(字符串)
  • Java基础-设计模式详解
  • [项目总结] 在线OJ刷题系统项目技术应用(上)
  • 燕山大学计算机网络实验(包括实验指导书)
  • 7B斗671B:扩散模型能否颠覆自回归霸权?
  • 网络编程—TCP/IP模型(TCP协议)
  • 通过Postman和OAuth 2.0连接Dynamics 365 Online的详细步骤
  • Java 进化之路:从 Java 8 到 Java 21 的重要新特性
  • 数据库原理
  • (二)输入输出处理——打造智能对话的灵魂
  • AI Agent开发大全第二十课-如何开发一个MCP(从0开发一个MCP Server)
  • 250405-VSCode编辑launch.json实现Debug调试Open-WebUI
  • Android学习总结之应用启动流程(从点击图标到界面显示)
  • STM32F103C8T6实现 SG90 180 °舵机任意角度转动
  • 【蓝桥杯】算法笔记3
  • JJJ:generic netlink例程分析
  • Flask+Vue构建图书管理系统及Echarts组件的使用
  • 第3课:状态管理与事件处理