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

[特殊字符] LeetCode 143 重排链表(Reorder List)详解

📌 问题描述

给定一个单链表 L0 → L1 → … → Ln-1 → Ln ,要求将其重新排列为:

L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

例如:

  • 输入:1 → 2 → 3 → 4 → 5

  • 输出:1 → 5 → 2 → 4 → 3

要求:

  • 不能修改节点的值,只能修改节点本身的指向。

  • 时间复杂度尽量低,空间复杂度 O(1)。

💡 思路分析

这个问题可以分为 三步走

  1. 找到链表中点
    使用快慢指针(fast/slow)。当 fast 每次走两步,slow 每次走一步,当 fast 到尾时,slow 就在中间节点。

  2. 反转链表后半部分
    将中点后的链表整体反转,这样最后一个节点会变成第一个,方便和前半段交替拼接。

  3. 合并两条链表
    交替拼接前半部分和反转后的后半部分,形成目标顺序。

    📝 代码实现(C++)

    /*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*///思路:找到中间节点,分成两条链表,前链表依次插入反转后的链表
    class Solution {
    public:ListNode* revise(ListNode *L){//反转if(L==nullptr){return nullptr;}if(L->next==nullptr) return L;ListNode *head=new ListNode(0);head->next=nullptr;while(L){ListNode *n=L->next;L->next=head->next;head->next=L;L=n;}return head->next;}void reorderList(ListNode* head) {if(head==nullptr||head->next==nullptr){return;}ListNode *s=head,*f=head;while(f&&f->next){//找中间节点f=f->next->next;s=s->next;}ListNode *L2=s->next;s->next=nullptr;//断开两条链表连接防止互相影响ListNode *front=head;ListNode *tail=revise(L2);while(tail){//插入反转节点ListNode*tn=tail->next, *fn=front->next;front->next=tail;tail->next=fn;front=fn;tail=tn;}}
    };

    🔎 关键步骤讲解

  4. 快慢指针找中点

    • slow 每次走一步,fast 每次走两步。

    • 最终 slow 停在中点位置。

  5. 反转链表

  6. ListNode *revise(ListNode *L) {ListNode *head=new ListNode(0);while(L){ListNode *n=L->next;L->next=head->next;head->next=L;L=n;}return head->next;
    }
    

    这样可以把链表 4 → 5 反转成 5 → 4

  7. 合并链表

    • 先接前半部分 1 → 2 → 3

    • 然后把反转后的 5 → 4 插入其中

    • 形成最终结果 1 → 5 → 2 → 4 → 3

      📚 总结

    • 本题考察链表的基础操作:快慢指针、反转链表、链表合并

    • 三步走策略非常经典:

      1. 找中点

      2. 反转后半部分

      3. 交替合并

    • 这道题在面试中很常见,掌握思路后,类似的链表重排问题都能迎刃而解。 🚀

      时间复杂度:O(n)
      空间复杂度:O(1)

http://www.dtcms.com/a/423728.html

相关文章:

  • 轻量级webgis环境搭建
  • 内网网站搭建教程做平面设计都在那个网站找免费素材
  • 网站备案都有哪些服务类网站模板
  • QT常用快捷键
  • 企业级智能体产业落地实践报告 - 智能体发展展望
  • 建设电子商务平台网站施工企业安全生产评价表下载
  • 如何在 vscode 里配置 MCP 并连接到 Elasticsearch
  • 开源安全管理平台wazuh-安装与配置
  • 开发区建网站外包上海小程序开发与制作公司
  • 常州做网站建设的公司网络营销的优势有哪些?
  • Zookeeper 技术详细介绍
  • 精美个人网站电子商务基础网站建设与维护单项选择题
  • 菜鸟教程网站建设培训网站建设方案说明书
  • 直播间 网站建设南京市建设工程网站
  • 网页设置百度seo外包
  • 塑料餐饮具头部优势,新天力市占率稳步提升
  • 郑州做定制网站的公司自学python需要的软件
  • 每天五分钟深度学习:如何判断神经网络是过拟合还是欠拟合?
  • Supermicro NVIDIA Grace Superchip存储服务器超微ARS-121L-NE316R开箱评测
  • 解决在使用Lombok时maven install 找不到符号的问题
  • 从零复现论文:深度学习域适应1
  • 一品威客:小程序智能客服:AI 如何帮助企业降低 80% 客服成本?
  • 爱电影网站织梦网站404怎么做
  • 【读取WPS嵌入图片】使用POI读取Excel中的嵌入图片
  • 【Block总结】LAGA,大核分组注意力门,实现特征融合|即插即用
  • 科研项目管理系统对比:如何管好需求、进度、资源与成果?
  • 全球设计网站排行高德是外国公司吗?
  • 动态规划DP:从硬币问题到挤牛奶问题的算法实战
  • 二十八、API之《System 类》——与系统交互的“桥梁”
  • GitHub 热榜项目 - 日榜(2025-09-29)