递归。需要用到O(N)存储空间
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if (head == NULL)
return head;
ListNode* left, *right,*newHead;
stack<ListNode*> s;
left = head;
right = head;
s.push(left);
int i = k-1;
while (right->next&&i)
{
right = right->next;
s.push(right);
i--;
}
if (i==0)//足够k个
{
ListNode* tail,*temp=NULL;
tail = reverseKGroup(right->next, k);
if (!s.empty())
{
temp = s.top();
s.pop();
}
newHead = temp;
while (!s.empty())
{
temp->next = s.top();
s.pop();
temp = temp->next;
}
temp->next = tail;
}
else//不够k个
{
newHead = head;
}
return newHead;
}
};