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

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.dtcms.com/a/310053.html

相关文章:

  • Ubuntu 开启wifi 5G 热点
  • 数字孪生城市:以虚实映射为起点,开启城市全要素数字化转型新纪元
  • Docker学习其二(容器卷,Docker网络,Compose)
  • FEVER数据集:事实验证任务的大规模基准与评估框架
  • 如何安全管理SSH密钥以防止服务器被入侵
  • Wisdom SSH开启高效管理服务器的大门
  • 企业WEB应用服务器TOMCAT
  • 将Varjo XR技术融入战斗机训练模拟器,有效提升模拟训练沉浸感与效率
  • python简单操作达梦数据库
  • 深入浅出理解WaitForSingleObject:Windows同步编程核心函数详解
  • 蘑兔 AI 音乐:你的专属音乐创作搭子
  • python基础:XPath解析网页数据:xpath简介、xpath语法、xpath节点、节点关系、xpath练习实战
  • 蓝桥杯----DA、AD
  • 3DEXPERIENCE结构树中的类型关系图谱
  • Linux(CentOS 7.9) 卸载、安装MySql 5.7详细步骤教程,包括密码设置、字符集设置等
  • 机器学习②【字典特征提取、文本特征处理(TF-IDF)、数据标准化与归一化、特征降维】
  • 在纯servlet项目中,使用@WebFilter定义了多个filter,如何设置filter的优先级
  • 力扣刷题日常(9-10)(待完善)
  • Python中.format()使用详解和格式化控制台日志场景示例
  • 【C语言入门级教学】字符指针变量
  • 逻辑回归算法中的一些问题
  • React核心:组件化与虚拟DOM揭秘
  • 《React Router深解:复杂路由场景下的性能优化与导航流畅性构建》
  • Rust → WebAssembly 的性能剖析全指南
  • NDI开发指南
  • SQL中的HAVING用法
  • SQL中的LEFT JOIN
  • 图论-最短路Floyd算法
  • OpenAI ChatGPT Agent横空出世:全能工具+实时交互,重新定义AI智能体的终极形态
  • 【go】switch用法梳理与总结