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题,我说了后续会补上第三种方法,现在虽然还没有补上,但也快了,我打算好好学习一下运算符重构,也要点时间的,但我说会补,那就一定会补上的

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值