题解 | #链表中的节点每k个一组翻转#

链表中的节点每k个一组翻转

https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    ListNode* reverseKGroup(ListNode* head, int k) {
        // write code here
        if(head==nullptr)
        {
            return nullptr;
        }

        ListNode* aaa = new ListNode(-1); // 还是需要1个伪头部
        aaa->next = head;

        // 先统计下长度
        int n = 1;
        ListNode* cur = head;
        while(cur->next!=nullptr)
        {
            cur=cur->next;
            n++;
        }

        int m = n/k; // 多少组需要反转
        cur = head;
        ListNode* pre = aaa;
        for(int b=1; b<m*k; b+=k)
        {
            // 区间是 [b,b+k-1]
            int e = b+k-1;
            for(int i = b; i<e; ++i) //内部就是BM2 指定区间反转
            {
                ListNode* tmp = cur->next;
                cur->next = tmp->next;
                tmp->next = pre->next;
                pre->next = tmp;

            }
            pre = cur; //此时curr还在上一组的第二个  这里令pre为下一组的前驱
            cur = cur->next; // 同时cur后移到该组第一个
            
        }

        return aaa->next;


    }
};

按照BM2 指定区间反转 自己写的

全部评论

相关推荐

运营你豪哥:简历改改吧-非本、求职意向技术岗、无实习经历、内容空洞 如果简历不爆改的话,应该是会持续崩溃了 1.把你教育经历放最下面去 2.蓝底照片很奇怪哈,感觉还在高中时代,建议白底重新拍一下 3.校园经历没啥必要,收集和反馈同学们对产品的意见,解决学生和老师之间的沟通,企业招聘不看这些哈 好好思考一下简历的设计和你要表达的重点,再去投简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务