经典好题,其中涉及到链表的反转等操作
代码
class Solution {
public:
ListNode *reverseKGroup(ListNode *head, int k) {
if(head==NULL||k<=1)
return head;
ListNode *p, *pre, *newHead;
newHead = new ListNode(0);
newHead ->next = head;
pre = newHead;
p = head;
int i = 0;
while(p!=NULL)
{
++i;
ListNode *next = p->next;
if(i%k==0)
{
pre = reverse(pre, next);
}
p = next;
}
return newHead->next;
}
ListNode * reverse(ListNode *pre, ListNode *end)
{
ListNode *last = pre->next;
ListNode *cur = last->next;
while(cur!=end)
{
ListNode *p = cur->next;
cur->next = pre->next;
pre->next = cur;
cur = p;
}
last->next = end;
return last;
}
};