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

[C/C++] List相关操作

List相关操作

1 链表二分

目标:
(1)对于偶数节点,正好对半分;
(2)对于奇数节点,前 = 后 + 1
(3)断开链表,方便后期合并

// 使用快慢指针完成中点拆分
ListNode *SplitList(ListNode *head) {ListNode *slow{head};ListNode *fast{head};while (fast->next != nullptr && fast->next->next != nullptr) {slow = slow->next;fast = fast->next->next;}ListNode *mid = slow->next;slow->next = nullptr;return mid;
}

2 链表合并

ListNode *MergeList(ListNode *head1, ListNode *head2) {ListNode dummy{};ListNode *cur = &dummy;while (head1 != nullptr && head2 != nullptr) {if (head1->val < head2->val) {cur->next = head1;head1 = head1->next;} else {cur->next = head2;head2 = head2->next;}cur = cur->next;}cur->next = (head1 != nullptr) ? head1 : head2;return dummy.next;
}

3 链表排序

ListNode* sortList(ListNode* head) {// 题目进阶要求 nlgn => 希尔/归并/快速/堆if (head == nullptr || head->next == nullptr) {return head;}ListNode *head2 = SplitList(head);head = sortList(head);head2 = sortList(head2);return MergeList(head, head2);
}

4 多链表合并

ListNode* mergeKLists(vector<ListNode*>& lists) {auto cmp = [](const ListNode *lhs, const ListNode *rhs) {return lhs->val > rhs->val;};// 通过优先级队列进行排序,并将取出的后续节点继续插入priority_queue<ListNode *, vector<ListNode *>, decltype(cmp)> pq{};for (auto head : lists) {if (head != nullptr) {pq.push(head);}}ListNode dummy{};ListNode *cur = &dummy;while (!pq.empty()) {// 取最小ListNode *node = pq.top();pq.pop();if (node->next != nullptr) {pq.push(node->next);}cur->next = node;cur = node;}return dummy.next;
}
http://www.lryc.cn/news/503241.html

相关文章:

  • 继电器控制与C++编程:实现安全开关控制的技术分享
  • 题解 - 找子序列(2024.12上海月赛丙组T4)
  • 在centos 7.9上面安装mingw交叉编译工具
  • ubuntu wine mobaxterm找不到串口和解决方案
  • 如何编译安装系统settings设置应用(5.0.0-Release)
  • <项目代码>YOLOv8 车牌识别<目标检测>
  • 协同办公软件新升级:细节优化,让办公更简单
  • 【原创学习笔记】西门子1200 PLC实现变频器控制
  • SQL server学习02-使用T-SQL创建数据库
  • 2024153读书笔记|《春烂漫:新平摄影作品选》——跳绳酷似人生路,起落平常,进退平常,莫惧征途万里长
  • MySQL有哪些高可用方案?
  • 前台进程是什么
  • Redis学习笔记之——学习计划
  • npm : 无法加载文件 D:\nodejs\npm.ps1
  • 【Neo4J】neo4j docker容器下的备份与恢复
  • 更新数据时Redis的操作
  • [实战]MySQL时间多了一秒
  • Windows环境基于ecplise的spring boot框架新建spring start project
  • C 进阶 — 字符函数和字符串函数 ( 二 )
  • Mybatis Plus 3.0 快速入门
  • RFDiffusion 计算二面角函数get_dih解读
  • 记一次回调失败问题
  • 前端常用的方法
  • RK3568(六)——led设备驱动(GPIO子系统)
  • hbuilder 本地插件配置
  • Spring Boot集成Kafka:最佳实践与详细指南
  • 基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 多图推理
  • 详解下c语言下的多维数组和指针数组
  • 免费送源码:Java+ssm+MySQL 基于微服务架构的餐饮系统的设计与实现 计算机毕业设计原创定制
  • LeetCode hot100-69-N