给你链表的头节点 head
,每 k
个节点一组进行翻转,请你返回修改后的链表。
k
是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k
的整数倍,那么请将最后剩余的节点保持原有顺序。
示例 1:
输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5]
/**
* 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) {}
* };
*/
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if(!head||!head->next) return head;
ListNode* p =head;
vector<int> nums;
while(p){nums.push_back(p->val);p=p->next;}
int lunshu=nums.size()/k; //要逆序的轮数
int i=0;
for(int j=0;j<lunshu;j++){
reverse(nums.begin()+i,nums.begin()+i+k); //k个一组反转数组
i+=k; //数组的秩每次+k
}
p=head;
for(int i=0;i<nums.size();i++){
p->val=nums[i];
p=p->next;
}
return head;
}
};