欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > LeetCode--25.k个一组翻转链表

LeetCode--25.k个一组翻转链表

2025/6/9 18:32:22 来源:https://blog.csdn.net/dying_man/article/details/148519071  浏览:    关键词:LeetCode--25.k个一组翻转链表

解题思路:

        1.获取信息:

                (1)给定一个链表,每k个结点一组进行翻转

                (2)余下不足k个结点,则不进行交换

        2.分析题目:

                其实就是24题的变题,24题是两两一组进行交换,这一道题就是多个一组进行交换

        3.示例查验:

                示例1和示例2:都用图表明了多个一组怎么进行交换

        4.尝试编写代码:

                我看见这道题,构思了三种方法,但我目前只实现了一种构思,后续我会补上其他的方法的,放心吧

                这三种方法的核心思路都是一样的,或者说25题和24题的核心思路都是一样的,各个方法只是手法略有不同而已,手法好了,你可以叫做手法大师,哈哈

                所以我下面方法的名字就是按手法来命名的,所以就直接看代码注释,我就不一 一讲解了

                (1)辅助存储空间+迭代

                        以下是完整代码

class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {stack<ListNode*>s;//辅助存储空间bool first=true;//是否是第一个组合ListNode*res;//结果链表的首元结点ListNode*temp;//存储上一组结点翻转后的最后一个结点while(head!=nullptr){s.push(head);head=head->next;if(s.size()==k){//如果储存够了一组if(first){res=s.top();first=false;}//如果是第一组,我们储存下结果链表的首元结点else{temp->next=s.top();//不是第一组,就连接上一组结点翻转后的最后一个结点和下一组结点翻转后的第一个结点}while(s.size()-1){//进行翻转操作ListNode*now=s.top();s.pop();now->next=s.top();}temp=s.top();//留下一个结点用于连接下一组结点翻转后的第一个结点temp->next=nullptr;//处理结点断开问题s.pop();}}if(s.size()){//处理冗余结点不足k个的情况,就保持它们原有的顺序,不进行翻转,直接进行连接while(s.size()!=1)s.pop();temp->next=s.top();}return res;}
};

下面的两种手法,我在努力地实现,你也可以尝试一下,看它们是否可行,到时候来这里对答案哦,算是磨练一下你咯,宝剑锋从磨砺出,梅花香自苦寒来嘛

                (2)使用辅助存储空间+递归

                (3)不使用辅助存储空间+递归

哈哈,今天又是偷懒的一天,之前21题,我说了后续会补上第三种方法,现在虽然还没有补上,但也快了,我打算好好学习一下运算符重构,也要点时间的,但我说会补,那就一定会补上的

好了,早睡,还是提一嘴,纸上得来终觉浅,绝知此事要躬行

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词