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

LeetCode 刷题【24. 两两交换链表中的节点、25. K 个一组翻转链表】

24. 两两交换链表中的节点

自己做

解:直接置换

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode *p = head;if(p == nullptr)                //空链表return nullptr;if(p->next == nullptr)          //只有一个元素return head;//先交换前两位ListNode *q = p->next; ListNode *r = q->next;p->next = r;               q->next = p;head = q;       //更新头指针指向的结点q = p->next;if(q != nullptr)r = q->next;elser = nullptr;//三英杰就位,交换?启动!while(r != nullptr){//交换p->next = r;q->next = r->next;r->next = q;//更新pqr位置p = q;q = p->next;if(q == nullptr)break;r = q->next;}return head;}
};

25. K 个一组翻转链表

自己做

 解:头插反转合并

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {ListNode *p = head;ListNode *r = new ListNode();       //头插//统计链表长度int len = 0;while(p != nullptr){p = p->next;len++;}if(len < k)               //连一组k都凑不出来return head;if(k == 1)                  //不用交换return head;//先处理第一组p = head;                   //重置指针p(上面用来统计长度了)ListNode *q = p->next;ListNode *tail = p;                //重新排序好的链表尾指针for(int i = 0; i < k; i++){     p->next = r->next;          //头插r->next = p;p = q;if(p != nullptr)q = q->next;}head = r->next;                 //重置头结点len -= k;                       //长度更新(这个长度表示剩下要排序的元素个数)while(len >= k){r->next = nullptr;          //重置头插链表ListNode *end = p;          //end指向头插链表的尾部for(int i = 0; i < k; i++){     p->next = r->next;          //头插r->next = p;p = q;if(p != nullptr)q = q->next;}//现在r指向的头插链表又填装好了,p也指向了下一组的起始位置tail->next = r->next;           //反转的部分和原先的链表合并(head指向的)tail = end;                     //更新taillen -= k;                   //更新长度}//凑不成一组的部分合并tail->next = p;return head;}
};

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

相关文章:

  • 特征工程 --- 特征提取
  • 嵌入式——C语言:俄罗斯方块
  • Spring Boot Actuator 保姆级教程
  • 【数据结构】-----排序的艺术画卷
  • Linux9 root密码修改
  • EXE加密软件(EXE一机一码加密大师) 最新版1.6.0更新 (附2025最新版本CSDN下载地址)
  • 日志归档存储策略在海外云服务器环境的容量规划方法
  • java的冒泡排序算法
  • 机器学习sklearn:编码、哑变量、二值化和分段
  • 【数据分享】南海综合波浪数据(1945-2018 年)(获取方式看文末)
  • OCR、文档解析工具合集
  • 在Alpine Linux上配置Redis使用NFS存储的完整指南
  • 包裹移动识别误报率↓76%:陌讯时序建模算法实战解析
  • 【C++】stack和queue
  • BGP服务器对于网络攻击该怎么办?
  • 《操作系统真象还原》 第五章 保护模式进阶
  • Qt结合ffmpeg实现图片参数调节/明亮度对比度饱和度设置/滤镜的使用
  • axios请求的取消
  • LOVON——面向足式Open-Vocabulary的VLN导航:LLM做任务分解、YOLO11做目标检测,最后L2MM将指令和视觉映射为动作,且解决动态模糊
  • ansible.cfg 配置文件的常见配置项及其说明
  • zabbix平台无法删除已停用主机的处理案例
  • Idea集成Jenkins Control插件,在IDEA中触发Jenkins中项目的构建
  • vivado implementation报错[Designutils 20-1307]
  • Dify版本升级实操
  • JavaWeb(苍穹外卖)--学习笔记16(定时任务工具Spring Task,Cron表达式)
  • 微信小程序页面间通信的实现方式
  • 《n8n基础教学》第一节:如何使用编辑器UI界面
  • 技术分享: 网关限流
  • kotlin语法和特性分析
  • 信号发生器和示波器阻抗匹配问题