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

数据结构算法真题

【2019】线性表

📌 思路分析

要实现 首尾交替合并,可以分为以下几步:

  1. 找到链表的中间节点(快慢指针)。

    • 快指针每次走 2 步,慢指针每次走 1 步。
    • 最后慢指针停在中点。
  2. 反转链表后半部分

    • 从中点开始,把后半部分链表逆置。
  3. 交替合并两个链表

    • 前半部分:a1,a2,a3,…
    • 后半部分(逆置后):an,an-1,…
    • 按照一前一后的方式拼接。

这样不需要额外数组存储,空间复杂度是 O(1)O(1),时间复杂度是 O(n)O(n)。


📌 C++ 实现代码

typedef struct node {int data;struct node* next;
} NODE;// 反转链表
NODE* reverseList(NODE* head) {NODE* prev = nullptr;NODE* curr = head;while (curr) {NODE* next = curr->next;curr->next = prev;prev = curr;curr = next;}return prev; // 返回新的表头
}// 主函数:重新排列链表
void reorderList(NODE* head) {if (!head || !head->next) return;// 1. 快慢指针找中点NODE* slow = head;NODE* fast = head;while (fast->next && fast->next->next) {slow = slow->next;fast = fast->next->next;}// 2. 反转后半部分NODE* second = reverseList(slow->next);slow->next = nullptr; // 断开前半部分和后半部分// 3. 合并两个链表NODE* first = head;while (second) {NODE* t1 = first->next;NODE* t2 = second->next;first->next = second;second->next = t1;first = t1;second = t2;}
}

📌 输出结果

原链表: 1 2 3 4 5 
重新排列后: 1 5 2 4 3

✅ 时间复杂度:

  • 找中点 O(n)O(n)
  • 反转链表 O(n)O(n)
  • 合并 O(n)O(n)
    总共 O(n)O(n)。

✅ 空间复杂度:

  • 仅使用常数指针变量,O(1)O(1)。
http://www.dtcms.com/a/399584.html

相关文章:

  • 容桂网站建设联系方式触屏网页界面设计
  • 网站设计方案公司建设免费网站制作
  • 国产CAD皇冠CAD(CrownCAD)三维建模教程:汽车水泵
  • 网站建设存在问题整改报告网站常用图标素材
  • 【Redis】缓存击穿、缓存穿透、缓存雪崩的解决方案
  • 东营外贸型网站设计怎么做点图片链接网站
  • 网站是怎么做wordpress. 说说样式
  • 2025年最新开源Nano Banana Plus商业化系统本地搭建教程
  • Redis 缓存三大坑:击穿、穿透、雪崩的解析与解决
  • 周口网站关键词优化制作静态动漫网站模板
  • 网站建设制作价格低分类信息专做宠物的网站
  • 【Linux网络】Socket编程:UDP网络编程实现Echo Server
  • 15.Linux 逻辑卷管理、交换空间管理及系统启动管理
  • DeepSeek-V3.1-Terminus深度解析:语言一致性、Agent能力增强,“终极版本“来了?
  • 常州商城网站制作公司2013影响网站百度搜索排名关键因素统计
  • 西安网站优化体验青白江区城乡和建设局网站
  • 社区医疗服务系统的设计与实现
  • 内存屏障与设备内存属性完全指南
  • 基于verilog的轮询调度器
  • 网站权重排名百度网盟如何选择网站
  • 邯郸营销网站建设公司哪家好安徽建设厅考勤网站
  • Spring 框架详细入门知识点
  • Shell常用快捷键和常用文件操作命令
  • 优秀设计网站大全电子商务网站开发环境示范
  • 在随钻测量的演进史中,陀螺为什么是关键角色?
  • seo网站排名全选网站建设工作情况总结
  • 在 Windows GPU 机器上运行 Linux CUDA
  • Python基础总结
  • 二手车网站开发PPT国内专业网站制作
  • 事业单位可以建设网站吗深圳网站设计哪好