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

[面试精选] 0206. 反转链表

文章目录

      • 1. 题目链接
      • 2. 题目描述
      • 3. 题目示例
      • 4. 解题思路
      • 5. 题解代码
      • 6. 复杂度分析

1. 题目链接


206. 反转链表 - 力扣(LeetCode)


2. 题目描述


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


3. 题目示例


示例 1 :

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2 :

输入:head = [1,2]
输出:[2,1]

4. 解题思路


  1. 问题理解
    • 给定一个单链表,要求将其反转
    • 反转后原链表的头节点变为尾节点,尾节点变为头节点
    • 所有节点的next指针方向需要反转
  2. 关键思路
    • 三指针法:使用pre、cur、nxt三个指针
      • pre:记录前驱节点(已反转部分的头节点)
      • cur:当前待处理节点
      • nxt:临时保存下一个待处理节点
    • 指针操作
      1. 保存当前节点的下一个节点(nxt = cur.next)
      2. 反转当前节点的指针(cur.next = pre)
      3. 前移pre指针(pre = cur)
      4. 前移cur指针(cur = nxt)
  3. 算法流程
    • 初始化pre为null,cur为head
    • 遍历链表:
      • 每次处理一个节点,反转其指针方向
      • 更新pre和cur指针
    • 当cur为null时,pre即为新链表的头节点

5. 题解代码


class Solution {public ListNode reverseList(ListNode head) {// pre指针用于记录前驱节点,初始为null(反转后的尾节点指向null)ListNode pre = null;// cur指针用于遍历链表,初始指向头节点ListNode cur = head;// 遍历链表直到当前节点为nullwhile (cur != null) {// 临时保存当前节点的下一个节点ListNode nxt = cur.next;// 反转当前节点的指针方向,指向前驱节点cur.next = pre;// pre指针前移到当前节点pre = cur;// cur指针移动到之前保存的下一个节点cur = nxt;}// 循环结束时pre指向新的头节点return pre;}
}

6. 复杂度分析


  1. 时间复杂度
    • 需要遍历整个链表一次
    • 时间复杂度为O(n),n为链表长度
  2. 空间复杂度
    • 只使用了常数个额外指针
    • 空间复杂度为O(1)

相关文章:

  • 二叉搜索树——AVL
  • Redisson学习专栏(四):实战应用(分布式会话管理,延迟队列)
  • 机器视觉2D定位引导一般步骤
  • C++基础算法————深度优先搜索(DFS)
  • 高考加油!UI界面生成器!
  • B3623 枚举排列(递归实现排列型枚举)
  • python魔法函数
  • 【基础算法】模拟算法
  • @PathVariable注解-补充
  • Python实现P-PSO优化算法优化卷积神经网络CNN分类模型项目实战
  • 【Java实战】低侵入的线程池值传递
  • PostgreSQL的扩展 dblink
  • python学习打卡day40
  • FreeCAD源码分析: 串行化工具
  • 记一次idea中lombok无法使用的解决方案
  • 卫生间改造翻新怎么选品牌?智能健康、适老有爱,我选瑞尔特
  • GitHub 趋势日报 (2025年05月30日)
  • MATLAB实战:机器学习分类回归示例
  • MATLAB实战:实现数字调制解调仿真
  • gcc相关内容
  • 网页设计专业服务公司/网站seo策划
  • 宁波东方论坛/长沙官网seo收费标准
  • 学软件工程专业后悔了/免费网站排名优化在线
  • 网站充值功能怎么做/视频专用客户端app
  • 网站开发后端做什么/怎么注册百度账号
  • 电商网站h5模板下载/信息流广告公司一级代理