题解 | #链表中的节点每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;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
08-21 13:43
被挂麻了已经
投递快手等公司10个岗位
点赞 评论 收藏
分享
码农索隆:想看offer细节
点赞 评论 收藏
分享
08-18 18:16
延安大学 C++
给我个面试可以吗
投递TP-LINK等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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