优选算法_k个一组翻转链表

发布时间:2026/5/20 2:30:03

优选算法_k个一组翻转链表 一.题目解析题目解析如下就是k个一组翻转链表,且不足的不翻转算法解析:模拟其实就是模拟,我们先求出需要翻转的次数n,再进行n次k个数的翻转即可1.先遍历链表可以求出翻转的次数n2.k个数的翻转可以使用头插法进行翻转(头插法翻转链表如下)(https://mp.csdn.net/mp_blog/creation/editor/159510695https://mp.csdn.net/mp_blog/creation/editor/159510695这模拟需要结合代码和画图进行解析,所以需要自己多画图二.代码实现/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ // 1.先求出翻转的次数n //2.再进行n 次,翻转长度k的链表即可 class Solution { public: ListNode* reverseKGroup(ListNode* head, int k) { int n0; ListNode*curhead; //1.遍历链表求出翻转的次数 while(cur) { curcur-next; n; } nn/k;//需要n组 ListNode*newheadnew ListNode(0); curhead; ListNode*prevnewhead; //2.使用头插法进行n次,k长度的翻转 for(int i0;in;i) { ListNode*tmpcur; for(int j0;jk;j) { ListNode*nextcur-next; cur-nextprev-next; prev-nextcur; curnext; } prevtmp; } //3.将不用翻转的接上,不足k个 prev-nextcur; curnewhead-next; delete newhead; return cur; } };

相关新闻