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

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

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

链表头插法和链表翻转

  1. 头插法
  2. 链表翻转

用例:

{1,2} ,3

不满K个元素时候直接原序返回,如果满足k个元素的时候,就要倒序返回,

因此 每k个元素作为一个链表,遍历的时候 要翻转过来,可以用头插法实现

剩下不足k个元素 由于要翻转过来,那么再翻转一次即可。

/**
 * 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* reverseKGroup(ListNode* head, int k) {
        if (!head || !head->next || k <= 1) return head;
        // write code here
        ListNode H(0);
        int cnt = 0;
        ListNode* p = &H;
        ListNode* tmp = NULL;
        while (head) {
            auto t = head->next;
            head->next = NULL;
            cnt++;
            tmp = insert(tmp, head);
            head = t;
            if (cnt % k == 0) {
                p->next = tmp;
                tmp = NULL;
                while (p && p->next)
                    p = p->next;
            }
        }
        p->next = rev(tmp);
        return H.next;
    }
    ListNode* insert(ListNode* a, ListNode* b) {
        b->next = a;
        return b;
    }
    ListNode* rev(ListNode* p) {
        ListNode* pre = NULL;
        ListNode* next = NULL;
        while (p) {
            next = p->next;
            p->next = pre;
            pre = p;
            p = next;
        }
        return pre;
    }
};

#ifdef debug


int main() {
    cout << " * " << endl;
    Solution k;
    auto arr = {1, 2, 3, 3, 5};
    println (
        k.reverseKGroup(makelist({1, 2}), 3)
    );
    return 0;
}


#endif

算法常用解题技巧 文章被收录于专栏

算法常用解题技巧

全部评论

相关推荐

头像
10-22 20:13
中南大学 Java
序言大家好呀。我是希晨er,一个初入职场的程序猿小登最近上班摸鱼刷到了一篇文章:10年深漂,放弃高薪,回长沙一年有感,还有聊聊30岁大龄程序员过往的心路历程,突然就有点感慨。我如今也做出了和大明哥一样的抉择,只是更早。此外我22年的人生,好像从来没好好记录过。正好现在工作不太忙,就想把这些经历写下来,也希望能得到社区里各位前辈的指点个人背景我是03年出生的西安娃,父母都是普通打工人。刚从中南大学软件工程专业毕业半年,现在在老家的央企过着躺平摆烂的日子成长轨迹从农村到城市的童年我家并不是西安的,只是爸妈在西安上班,从小学之后就把我接到了西安。后来老家房子拆了,爷爷奶奶也搬了过来。农村的生活,我觉...
Yki_:看哭了,恋爱那一段你女朋友说你不够关心她,可你毕竟也愿意遇到矛盾写几千字来和她慢慢分析;说不愿意给她花钱,我感觉可能只是消费观不一样;如果她想留在长沙,也应该提前跟你说开。不过她也许会心疼你放弃大厂offer转向数字马力?我也因为同样的原因有过一段幸福而充满遗憾的感情,不过跟爱情相比确实前途更重要一点。至于offer的选择,换我我也会这么选。把这些旧事记录下来以后,接下来就好好向前看吧,加油兄弟
🍊晨光随笔
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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