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

剑指offer21——反转链表

反转链表


定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

思考题:

  • 请同时实现迭代版本和递归版本。
数据范围

链表长度 [ 0 , 30 ] [0,30] [0,30]

样例
输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL

方案一、迭代

翻转即将所有节点的 next 指针指向前驱节点。

由于是单链表,我们在迭代时不能直接找到前驱节点,所以需要一个额外的指针保存前驱节点。
注意:在改变当前节点的 next 指针前,不要忘记保存它的后继节点。

复杂度分析:
  • 空间复杂度:遍历时只有 3 个额外变量(前驱节点、当前节点、后继节点),所以额外的空间复杂度是 O(1)
  • 时间复杂度:只遍历一次链表,时间复杂度是 O(n)
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode *prev = nullptr;ListNode *cur = head;while (cur){ListNode *next = cur->next;cur->next = prev;prev = cur, cur = next;}return prev;}
};
方案一、递归

首先考虑 reverseList 函数的作用:它可以翻转一个链表,并返回新链表的头节点(即原链表的尾节点)。

递归过程:
  1. 递归处理 reverseList(head->next)
    • 翻转以 head->next 为头节点的子链表,并返回原链表的尾节点 tail
  2. 调整指针
    • 此时 head->next 是新链表的尾节点,将其 next 指针指向 head
    • head->next 置空(防止成环)。
  3. 返回新头节点
    • 新链表的头节点是 tail,最终返回它即可完成整个链表的翻转。
复杂度分析:
  • 空间复杂度:递归深度为 n,系统栈空间占用 O(n)
  • 时间复杂度:每个节点仅被访问一次,时间复杂度为 O(n)
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {if (!head || !head->next) return head;ListNode *tail = reverseList(head->next);head->next->next = head;head->next = nullptr;return tail;}
};

相关文章:

  • 力扣上C语言编程题:最大子数组和(涉及数组)
  • Qwen3-Embedding-8B:文本嵌入界的“卷王”,多语言检索新标杆!
  • 嵌入式学习笔记 - C语言访问地址的方式,以及指针的进一步理解
  • 简单的五子棋实现简介
  • 6.11本日总结
  • typescript中的泛型
  • 字符串|数组|计算常见函数整理-竞赛专用(从比赛真题中总结的,持续更新中)
  • 使用CSDN作为Markdown编辑器图床
  • 【Python-Day 25】玩转数字:精通 math 与 random 模块,从数学运算到随机抽样
  • 图文教程——Deepseek最强平替工具免费申请教程——国内edu邮箱可用
  • 亚马逊Woot黑五策略,快速提升亚马逊业绩
  • LeetCode - 136. 只出现一次的数字
  • vue3 + ant 实现 tree默认展开,筛选对应数据打开,简单~直接cv
  • Java异步编程难题
  • 渗透测试PortSwigger Labs:遭遇html编码和转义符的反射型XSS
  • 使用Gradle打包springboot项目为JAR包教程
  • SQL进阶之旅 Day 26:分库分表环境中的SQL策略
  • python数据结构和算法(4)
  • 51la查看https统计,悟空统计助力高效运营
  • TensorZero:开源 LLM 应用优化与可观测性平台
  • 阿里云网站建设 部署与发布答案/徐州自动seo
  • 外贸网络整合营销推广方案/seo sem
  • 建筑工程ppt模板免费下载/seo营销软件
  • 上街做网站/长沙市seo百度关键词
  • 做美图 网站有哪些东西吗/杭州网站优化咨询
  • 茂名市人民政府门户网站建设/软文推广范文