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

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

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

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param head ListNode类
 * @param k int整型
 * @return ListNode类
 */
struct ListNode* reverseKGroup(struct ListNode* head, int k ) {
    int nr_node = 0;
    int cnt = 1;
    struct ListNode* curr = head;
    struct ListNode* prev = NULL;
    struct ListNode* next = NULL;
    struct ListNode* first = NULL;
    struct ListNode* left = NULL;
    struct ListNode* right = NULL;
    while (curr) {
        curr = curr->next;
        nr_node++;
    }
    if (nr_node < k || k <= 1 || nr_node <= 1) {
        return head;
    } else {
        curr = head;
    }
    while (curr) {
        next = curr->next;
        if (cnt % k == 1) {
            left = prev;
            first = curr;
            prev = curr;
            if (nr_node > k && nr_node - cnt < k - 1)
                break;
        } else if (cnt % k == 0) {
            first->next = next;
            if (left) {
                left->next = curr;
            } else {
                head = curr;
            }
            curr->next = prev;
            prev = first;
        } else {
            curr->next = prev;
            prev = curr;
        }
        cnt++;
        curr = next;
    }
    return head;
}

全部评论

相关推荐

昨天 17:11
已编辑
广东工业大学 Java
点赞 评论 收藏
分享
钱嘛数字而已:辅导员肯定不能同意,不然你出事了,他要承担责任。但是,脚和脑子都长在你自己身上,使用它还需要向辅导员报告么? 辅导员必须按流程拒绝你,然后你拿出成年人的态度,做自己的选择。
点赞 评论 收藏
分享
在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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