思路:
1 写一个翻转链表的子函数
2 在主函数中,找到翻转的开头和翻转的结尾,然后递归的调用主函数来翻转下一组。
需要注意的是head->next = reverseKGroup(cur,k);因为翻转之后head在最后一个,head->next就是下一段的第一个。
实现代码:
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* cur = head;
for(int i = 0; i < k; i++){
if(!cur) return head;
cur = cur->next;
}
ListNode* new_head = reverse(head, cur);
head->next = reverseKGroup(cur,k);
return new_head;
}
ListNode* reverse(ListNode* head, ListNode* tail) {
ListNode *pre = tail;
while (head != tail) {
ListNode *t = head->next;
head->next = pre;
pre = head;
head = t;
}
return pre;
}
};