25、Reverse Nodes in k-Group
K组翻转链表
给你一个链表以及一个 k ,将这个链表从头指针开始每 k 个翻转一下。链表元素个数不是 k 的倍数,最后剩余的不用翻转。
样例
给出链表 1->2->3->4->5
k = 2
, 返回 2->1->4->3->5
k = 3
, 返回 3->2->1->4->5
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* curr=head;
for(int i=0;i<k;i++)
{
if(!curr)return head;
curr=curr->next;
}
ListNode* new_head=reverse(head,curr);
head->next=reverseKGroup(curr,k);
return new_head;
}
ListNode* reverse(ListNode* first,ListNode* last)
{
ListNode *prev=last;
while(first!=last)
{
ListNode *curr=first->next;
first->next=prev;
prev=first;
first=curr;
}
return prev;
}
};