先求出链表长度,得到需要翻转的次数(len/k)
调用翻转函数,进行翻转;
class Solution {
public:
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
ListNode* revser(ListNode* head, int n) {
ListNode* newhead = new ListNode(-1);
ListNode* flag = head;
while (head&&n > 0) {
ListNode* temp = head->next;
head->next = newhead->next;
newhead->next = head;
head = temp;
n--;
}
flag->next = head;
return newhead->next;
}
ListNode* reverseKGroup(ListNode* head, int k) {
// write code here
ListNode* newhead = new ListNode(-1);
newhead->next = head;
ListNode* first = head;
int len = 0;
while (first) {
first = first->next;
len++;
}
first = newhead;
for (int i = 0; i < len / k; i++) {
ListNode* pre = first->next;
first->next = revser(first->next, k);
first = pre;
}
return newhead->next;
}
};
京公网安备 11010502036488号