题解 | #链表中的节点每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 指定区间反转 自己写的

全部评论

相关推荐

点赞 评论 收藏
分享
代码飞升:别用口语,后端就写后端,前端就写前端,最后别光后悔
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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