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

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

https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e?tpId=196&tqId=37080&rp=1&sourceUrl=%2Fexam%2Foj%3Fdifficulty%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=3&judgeStatus=undefined&tags=580&title=

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    ListNode* reverseONE(ListNode* headone, int k){  //反转链表,增加处理头尾节点的部分
        ListNode* curr = headone->next;
        ListNode* prev = nullptr;
        ListNode* tail = headone->next;  //记录这组新的尾

        while(k--){
            ListNode* temp = curr->next;
            curr->next = prev;
            prev = curr;
            curr = temp;
        }

        tail->next = curr;  //把新的尾连接到下一组的头;
        headone->next = prev;  //把上一组的尾连接到这组的头;

        return headone = tail;
    }

    ListNode* reverseKGroup(ListNode* head, int k) {  //主函数
        ListNode* node = head;
        int nums = 0;
        while(node){   //统计有多少个节点
            ++nums;
            node = node->next;
        }
        int groupnums = nums/k;  //计算多少组

        ListNode dummy(0);    //头结点处理
        dummy.next = head;
        node = &dummy;
        for(int i=1; i <=groupnums; i++){  //每组处理
            node = reverseONE(node, k);  //返回时更新下一组的头
        }

        return dummy.next;
    }
};











全部评论

相关推荐

机械打工仔:第一位颇有孟德之志
点赞 评论 收藏
分享
每晚夜里独自颤抖:把华北改为华南再试一试,应该就没啥问题了。改完可能都不用投,别人主动联系了。
点赞 评论 收藏
分享
05-03 12:45
西南大学 Java
nsnzkv:你这项目写的内容太多了,说实话都是在给自己挖坑,就算简历过了,后面面试也难受
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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