【2019年数据结构真题】


【2019统考真题】设线性表L= (a1,a2,a3,…,an-2,an-1,an)采用带头结点的单链表保存,链表中的结点定义如下:

typedef struct node{int data;struct node*next;
}NODE;

请设计一个空间复杂度为0(1)且时间上尽可能高效的算法,重新排列L中的各结点,得到线性表 L2 = (a1,an,a2,an-1,a3,an-1…)

要求:

  1. 给出算法的基本设计思想。

  2. 根据设计思想,采用C或C++语言描述算法,关键之处给出注释。

  3. 说明你所设计的算法的时间复杂度

题目信息:

  • 空间复杂度为O(1)且时间上尽可能高效-----尽量不适用栈,队列等辅助结构
  • 带有头节点,不用单独处理第一个结点

方法一:

void ans(Node* L, int n){int t=(n+1)/2;	//即n/2向上取整Node* pre=L, p, q, qq;	//q为指向后半段链的指针for (int i=0; i<t; i++)pre=pre->next;	//pre指向a⌈n/2⌉ q=pre->next;	//q指向a⌈n/2⌉+1pre->next=null;	//a⌈n/2⌉的下一个结点为空len=n-t;	//后一半链长度for (int i=len; i>0; i--){	//一个一个重新插入pre=L;for (int j=0; j<i; j++)	//找到插入位置pre=pre->next;p=pre->next;	//pre是插入位置pre->next=q;	//插入qqq=q->next;	//qq暂存q的下一个结点q->next=p;	//q下一个结点是插入位置后的点q=qq;	//q指向qq所指结点}
}
可这么理解:

给定一个单链表 L:L0→L1→…→Ln-1→Ln ,

将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

给定链表 1->2->3->4, 重新排列为 1->4->2->3.

示例 2:

给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.

算法的基本思想:

  1. 快慢指针找中点,将原链表切分成两段
  2. 将后面的链表翻转
  3. 将第二个链表的每个结点依次插在第一个链表的后面

\

比如:1->2->3->4->5->null

切分变成:1->2->3->null ; 4->5->null ;

将 4->5 翻转变成5->4;

插入变成:1->5->2->4->3->null;

class Solution {public:void reorderList(ListNode* head) {if (head == NULL || head->next == NULL)return;
//快慢指针分出两段ListNode* slow = head, *fast = head;while (fast->next && fast->next->next) {slow = slow->next;fast = fast->next->next;}
//后端反转ListNode* needReverser = slow->next;slow->next = NULL;needReverser = reverse(needReverser);
//插入前端缝隙ListNode* cur = head;while (cur && needReverser) {ListNode* curSecond = needReverser;needReverser = needReverser->next;ListNode* nextCur = cur->next;curSecond->next = cur->next;cur->next = curSecond;cur = nextCur;}}ListNode* reverse(ListNode* head) {ListNode* p1 = NULL;ListNode* p2 = head;ListNode* p3 = p2;while (p2) {p3 = p2->next;p2->next = p1;p1 = p2;p2 = p3;}return p1;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/185477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

酷狗音乐app 评论signature

文章目录 声明目标加密参数定位翻页逻辑代码实现 声明 本文章中所有内容仅供学习交流&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请私信我立即删除&#xff01; 目标 复制curl转python # -*- c…

供应链大事记 | 2024第二届中国供应链碳中和峰会来了!

背景 当下&#xff0c;全球气候变化、环境污染、资源紧张问题加剧&#xff0c;世界各国致力于推动碳达峰、碳中和&#xff0c;绿色低碳发展已成为全球共识。我国也于2020年明确提出“3060双碳目标”&#xff0c;经济结构、能源结构、产业结构亟待转型升级&#xff0c;各重点行…

熟悉SVN基本操作-(SVN相关介绍使用以及冲突解决)

一、SVN相关介绍 1、SVN是什么? 代码版本管理工具它能记住你每次的修改查看所有的修改记录恢复到任何历史版本恢复已经删除的文件 2、SVN跟Git比&#xff0c;有什么优势 使用简单&#xff0c;上手快目录级权限控制&#xff0c;企业安全必备子目录checkout&#xff0c;减少…

体脂称方案设计——电子秤方案芯片CS1231

电子秤与我们日常生活息息相关&#xff0c;智能科技化的生活形成万物互联的模式。测量精度领域随着大市场的发展也进入到发展高峰时期&#xff0c;电子秤从开始的弹簧压力测物体重量走向更为智能的测体脂、人体成分等相关的测量。所以在做方案开发中它的功能也在更新和智能化。…

Git——工作区管理

如何管理工作目录&#xff0c;以便用户可以更高效地新建提交。如何在处理工作区和暂存区文件的过程中修复错误&#xff0c;以及如何修复最近一次提交记录中的问题&#xff1b;同时还会了解到如何安全地使用暂存机制和多个工作目录处理工作流中的中断问题。 主要内容有以下几点…

玻色量子研发进展

2023年 2023.8 量子计算突破云渲染资源调度&#xff01;真机测试完整报告公开&#xff01; 2023.8 量子计算突破金融信用评分&#xff01;真机测试完整报告公开&#xff01; 2023.7 玻色量子“揭秘”之旅行商问题与Ising建模 2023.7 玻色量子“揭秘”之背包问题与Ising建…

Ubuntu 配置打开文件限制

cat /etc/security/limits.conf | grep -Ev "^$|#"量 # ulimit -n 1024000软限制的打开文件数 # ulimit -Sn 1024000硬限制的打开文件数量 # ulimit -Hn 1024000系统打开文件描述符的最大数量 # sysctl fs.nr_open fs.nr_open 1048576系统打开文件的最大数量 #…

采集软件大全-全网免费的采集软件大全

采集软件大揭秘&#xff1a;从排名到任意网站采集的全方位解读 在数字时代&#xff0c;信息是黄金&#xff0c;而采集软件就是那把能够淘金的工具。无论是市场调研、竞品分析还是SEO优化&#xff0c;采集软件都扮演着不可或缺的角色。在这个领域里&#xff0c;有许多选择&…

性能测试线上监控

如果你的产品出现了一个线上问题&#xff0c;你会是怎么样的反应&#xff1f; 也许会跟下面这张图一样。 哇&#xff01;有一个线上bug&#xff0c;好慌呀&#xff01;&#xff01; 咦&#xff0c;问题似乎自动解决了&#xff1f;渐渐冷静。 不对&#xff01;&#xff01;&a…

虚拟机系列:Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置

Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置 Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置 在更新Oracle VM Virtua…

【JavaEE初阶】 详解HTTPS协议加密过程

文章目录 &#x1f334;HTTPS协议是什么&#xff1f;&#x1f384;运营商劫持事件&#x1f38b;HTTPS的工作过程&#x1f6a9;对称加密&#x1f6a9;非对称加密&#x1f6a9;引入证书&#x1f6a9;完整流程 &#x1f333;HTTPS加密总结⭕总结 &#x1f334;HTTPS协议是什么&…

基于SSM校园驿站管理系统的设计与实现

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对校园快递信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

C语言——多种方式打印出1000之内的所有的“水仙花数”

所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。水仙花数是指一个三位数&#xff0c;它的每个位上的数字的立方和等于它本身。例如&#xff0c;153是一个水仙花数&#xff0c;因为1^3 5^3 3^3 153。 方法一 #define _CRT_SECURE_NO_WARNINGS 1#include <std…

Java中四个元注解@Retention,@Target,@Inherited,@Documented

在 Java 中&#xff0c;有四个重要的元注解&#xff0c;它们分别是 Retention、Target、Inherited 和 Documented&#xff0c;它们用于对自定义注解进行修饰和说明。 元注解是用于定义注解的注解 Retention&#xff1a;Retention 用于指定注解的保留策略&#xff0c;即注解在代…

Docker自定义镜像

目录 回顾 镜像含义 DockerFile语法 自定义java项目镜像 创建一个空目录&#xff0c;在这个空目录中创建一个文件&#xff0c;命名为 DockerFile&#xff0c;将 java 项目打包成 jar 包&#xff0c;放到这个目录中 ​编辑 编写DockerFile文件信息 使用 docker build 构建…

Cesium 性能优化 - 学习笔记

1. Cesium 性能优化 - 学习笔记 开启FPS显示当前帧率 viewer.scene.debugShowFramesPerSecound true;关闭太阳&#xff0c;月亮&#xff0c;天空盒&#xff0c;雾等相关特效 viewer.scene.moon.show false; viewer.scene.fog.enabled false; viewer.scene.sun.show fals…

1. TiDB-Operator 备份到 Minio

创建minio s3 初始化minio minio server $HOME/operator/data --console-address :9090设置region为上海 创建tidb-operator备份CR 1.备份CR配置文件backup-s3.yaml信息 apiVersion: pingcap.com/v1alpha1 kind: Backup metadata:name: backup2s3-devnamespace: tidb-admi…

分享86个简历竞聘PPT,总有一款适合您

分享86个简历竞聘PPT&#xff0c;总有一款适合您 86个简历竞聘PPT下载链接&#xff1a;https://pan.baidu.com/s/130iX0EIH6J-PFzb6HcntcQ?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整…

【追求卓越10】算法--跳表

引导 在上一节中&#xff0c;我们学习到二分查找&#xff0c;惊叹于它超高的效率&#xff08;时间复杂度为O(logn)&#xff09;。但是二分查找有一个局限性就是依赖于数组&#xff0c;这就导致它应用并不广泛。 那么适用链表是否可以做到呢&#xff1f;答案是可以的。只不过要复…

【程序员的自我修养03】深入了解ELF文件格式

绪论 大家好&#xff0c;欢迎来到【程序员的自我修养】专栏。正如其专栏名&#xff0c;本专栏主要分享学习《程序员的自我修养——链接、装载与库》的知识点以及结合自己的工作经验以及思考。编译原理相关知识本身就比较有难度&#xff0c;我会尽自己最大的努力&#xff0c;争取…