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

牛客:链表分割算法详解

链表分割_牛客题霸_牛客网

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/#include <cstddef>
typedef struct ListNode ListNode;
class Partition {
public:ListNode* partition(ListNode* pHead, int x) {// 思路:创建两个临时链表,分别存储小于x和大于等于x的节点// 最后将两个链表连接起来// 定义两个哑头节点(简化边界处理)和对应的尾指针// lesshead/lesstail:存储所有小于x的节点// greaterhead/greatertail:存储所有大于等于x的节点ListNode *lesshead , *greaterhead;ListNode *lesstail , *greatertail;// 为哑节点分配内存lesshead = lesstail = (ListNode*)malloc(sizeof(ListNode));greaterhead = greatertail = (ListNode*)malloc(sizeof(ListNode));// 初始化哑节点的next指针为NULLlesshead->next = greaterhead->next = NULL;// 遍历原链表ListNode* cur = pHead;while(cur) {if(cur->val < x) {// 当前节点值小于x,加入到less链表lesstail->next = cur;    // 将当前节点链接到less链表尾部lesstail = lesstail->next;  // 更新less链表的尾指针} else {// 当前节点值大于等于x,加入到greater链表greatertail->next = cur;    // 将当前节点链接到greater链表尾部greatertail = greatertail->next;  // 更新greater链表的尾指针}cur = cur->next;  // 移动到下一个节点}// 将less链表的尾部与greater链表的头部连接lesstail->next = greaterhead->next;// 确保新链表的尾部为NULL,避免出现环greatertail->next = NULL;// 保存新链表的头节点(lesshead的下一个节点)ListNode* list = lesshead->next;// 释放哑节点的内存(避免内存泄漏)free(lesshead);free(greaterhead);return list;}
};/* 样例讲解:
假设输入链表为:1 -> 4 -> 3 -> 2 -> 5 -> 2,x = 3步骤1:初始化两个哑节点
lesshead(哑) -> NULL
greaterhead(哑) -> NULL步骤2:遍历原链表并分区
- 节点1(1 < 3):加入less链表lesshead -> 1 (lesstail指向1)greaterhead -> NULL- 节点4(4 ≥ 3):加入greater链表lesshead -> 1greaterhead -> 4 (greatertail指向4)- 节点3(3 ≥ 3):加入greater链表lesshead -> 1greaterhead -> 4 -> 3 (greatertail指向3)- 节点2(2 < 3):加入less链表lesshead -> 1 -> 2 (lesstail指向2)greaterhead -> 4 -> 3- 节点5(5 ≥ 3):加入greater链表lesshead -> 1 -> 2greaterhead -> 4 -> 3 -> 5 (greatertail指向5)- 节点2(2 < 3):加入less链表lesshead -> 1 -> 2 -> 2 (lesstail指向2)greaterhead -> 4 -> 3 -> 5步骤3:连接两个链表
less链表尾部(2) -> greater链表头部(4)
最终链表:1 -> 2 -> 2 -> 4 -> 3 -> 5步骤4:释放哑节点内存,返回结果链表
*/

http://www.xdnf.cn/news/1339669.html

相关文章:

  • LeetCode100 -- Day3
  • C++---滑动窗口平滑数据
  • 深度学习之NLP基础
  • KB5063878补丁故障解决方案:从蓝屏幕到系统修复的全面指南
  • 短波红外科研相机:开启科研新视野的利器​
  • 【矩池云】实现Pycharm远程连接,上传数据并解压缩
  • C++入门自学Day16-- STL容器类型总结
  • 全文 part1 - DGEMM Using Tensor Cores, and Its Accurate and Reproducible Versions
  • 阿里云对象存储OSS之间进行数据转移教程
  • 打工人项目日报计划
  • 数据安全管理——解读银行保险机构数据安全管理办法【附全文阅读】
  • Elasticsearch Ruby 客户端elasticsearch / elasticsearch-api
  • DBLens 业界首创AI表结构变更审查,智能评估影响,助力开发效率跃升。
  • 数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_数据查询(2)分组查询
  • 第三方软件测试报告的行业价值
  • 两台电脑之间如何传输大文件?
  • C++设计模式--策略模式与观察者模式
  • 安卓app、微信小程序等访问多个api时等待提示调用与关闭问题
  • QT QProcess, WinExec, ShellExecute中文路径带空格程序或者脚本执行并带参数
  • 灵活使用UE5 Modeling中的UV编辑功能
  • QT-初识
  • 日志收集(ELK)
  • javaweb开发笔记——微头条项目开发
  • 【笔记】Facefusion3.3.2 之 NSFW 检测屏蔽测试
  • Windows 系统中,添加打印机主要有以下几种方式
  • macos使用FFmpeg与SDL解码并播放H.265视频
  • Git常用操作大全(附git操作命令)
  • 【LeetCode】18. 四数之和
  • 微服务的编程测评系统13-我的竞赛列表-elasticSearch
  • javaweb开发笔记—— 前端工程化