线性表的应用 链式有序表的合并旋转链表分隔链表翻转链表#includeiostream#includecstdlibusing namespace std;typedef int ElemType;typedef int Status;typedef struct LNode{ElemType data;struct LNode *next;int val;}LNode,*LinkList;//创建链表void CreateList_H(LinkList L,int n){Lnew LNode;L-nextNULL;cout请输入nendl;for(int i0;in;i){LNode*p new LNode;cinp-data;p-nextL-next;L-nextp;}}//输出链表void PrintList (LinkList L) {LNode *p;pL-next;while(p!NULL) {coutp-data ;pp-next;}coutendl;}//链式有序表的合并void MergeList_L(LinkList La,LinkList Lb,LinkList Lc){LNode *paLa-next;LNode *pbLb-next;LcLa;LNode *pcLc;while(papb){if(pa-datapb-data){pc-nextpa;pcpa;papa-next;}else{pc-nextpb;pcpb;pbpb-next;}}pc-nextpa?pa:pb;delete Lb;}//旋转链表struct LNode* rotateRight(struct LNode* head,int k){if(k0||headNULL||head-nextNULL)return head;int n1;struct LNode* tailhead;while(tail-next !NULL){tailtail-next;n;}int movenumk%n;if(movenum0)return head;tail-nexthead;int addnumn-movenum;while(addnum--)tailtail-next;struct LNode* newheadtail-next;tail-nextNULL;return newhead;}//分隔链表struct LNode*partition(struct LNode*head,int x){struct LNode*small(struct LNode*)malloc(sizeof(struct LNode ));struct LNode*large(struct LNode*)malloc(sizeof(struct LNode ));struct LNode*pahead;struct LNode*pbsmall;struct LNode*pclarge;while(pa!NULL){if(pa-val x){pb-nextpa;pbpb-next;}else{pc-nextpa;pcpc-next;}papa-next;}pc-nextNULL;pb-nextlarge-next;struct LNode* newhead small-next;return newhead;}//翻转链表struct LNode* reverseKGroup(struct LNode* head,int k){int xk;int n0;struct LNode* s (struct LNode*)malloc(sizeof(struct LNode));struct LNode* curs;struct LNode* slowhead;struct LNode* fastNULL;struct LNode* prevNULL;while(slow){n;slowslow-next;}slowhead;n/k;for(int i0;in;i){while(x){fastslow-next;slow-nextprev;prevslow;slowfast;x--;}cur-nextprev;while(cur-next)curcur-next;prevNULL;xk;}cur-nextslow;struct LNode* newheads-next;return newhead;}int main(){cout --- 测试 1: 合并有序链表 --- endl;LinkList La, Lb, Lc;cout 创建链表 A (需有序): ;CreateList_H(La, 3);cout 创建链表 B (需有序): ;CreateList_H(Lb, 3);MergeList_L(La, Lb, Lc);cout 合并结果: ;PrintList(Lc);cout endl;// --- 测试 2: 旋转链表 ---cout --- 测试 2: 旋转链表 --- endl;LinkList L_rotate;cout 创建用于旋转的链表: ;CreateList_H(L_rotate, 5);int k_rot 2;cout 向右旋转 k_rot 位后的结果: ;LNode* res_rot rotateRight(L_rotate-next, k_rot);// 临时打印LNode* temp res_rot;while(temp) { cout temp-data ; temp temp-next; }cout endl;cout endl;// --- 测试 3: 分隔链表 ---cout --- 测试 3: 分隔链表 (以 3 为界) --- endl;LinkList L_part;cout 创建用于分隔的链表: ;CreateList_H(L_part, 5); // 例如输入 3 1 4 1 5LNode* res_part partition(L_part-next, 3);temp res_part;while(temp) { cout temp-data ; temp temp-next; }cout endl;cout endl;// --- 测试 4: K 个一组翻转 ---cout --- 测试 4: K 个一组翻转 (k2) --- endl;LinkList L_rev;cout 创建用于翻转的链表: ;CreateList_H(L_rev, 5); // 例如输入 1 2 3 4 5LNode* res_rev reverseKGroup(L_rev-next, 2);temp res_rev;while(temp) { cout temp-data ; temp temp-next; }cout endl;return 0;}

相关新闻

最新新闻

深入解析Android系统服务:AMS与ATM启动流程及协作机制

深入解析Android系统服务:AMS与ATM启动流程及协作机制

1. 项目概述:从“开机”到“点开App”的幕后英雄每次我们按下手机的开机键,或者点开一个App图标,屏幕亮起、界面加载,这一系列流畅动作的背后,是一套极其精密和复杂的系统在协同工作。对于Android开发者,尤…

2026/8/26 22:06:56
自建IoT平台进阶:设备管理、OTA升级与规则引擎实战指南

自建IoT平台进阶:设备管理、OTA升级与规则引擎实战指南

把设备接进来、数据能上云之后,我一度觉得自己的IoT平台已经差不多了。直到在一个真实项目里被设备管理、固件升级和多租户需求连续打脸,才明白原来那只是地基。这篇文章是“Build Your Own IoT Platform”系列的第三篇,重点聊一聊我已经踩过…

2026/8/26 22:06:56
Codex与开发工具缓存迁移:彻底解决C盘空间告急

Codex与开发工具缓存迁移:彻底解决C盘空间告急

1. C盘又红了:Codex、缓存和自动化工具的“三座大山”最近在本地开发时发现 C 盘空间又亮起了红灯,清理完临时文件、回收站之后,没过多久空间又被打回原形。仔细排查了一遍磁盘占用,发现问题主要集中在三个方向:Codex …

2026/8/26 22:06:56
模糊逻辑推理系统:从概念到Python实现,以智能洗衣机为例

模糊逻辑推理系统:从概念到Python实现,以智能洗衣机为例

1. 从“模糊”到“智能”:为什么洗衣机需要模糊逻辑?如果你拆开一台现代全自动洗衣机的控制板,或者翻看它的程序代码,你会发现一个有趣的现象:它很少会精确地告诉你“水位必须达到35.2厘米”或“电机转速必须维持在每分…

2026/8/26 22:06:56
C++高效初始化1-n序列:iota、generate与性能对比全解析

C++高效初始化1-n序列:iota、generate与性能对比全解析

1. 项目概述:为什么需要初始化1-n的vector?在C的日常开发里,给一个std::vector填充从1到n的连续整数,这个需求听起来简单得有点“小儿科”。但恰恰是这种基础操作,最能体现一个程序员对标准库的熟悉程度和代码效率的追…

2026/8/26 22:06:56
运放频率补偿全解析:从自激振荡到相位裕度与Miller补偿

运放频率补偿全解析:从自激振荡到相位裕度与Miller补偿

做运放设计或者调试运放电路的人,十有八九都遇到过这种怪现象:明明是负反馈,接成跟随器却在高频自激,输出波形毛刺不断;或者仿真里相位裕度看着有60度,一上电路板接个长线负载就振给你看。频率补偿&#xf…

2026/8/26 22:01:56