这道题目,我的解法思想与Swap Nodes in Pairs那道题基本上是一样的,只不过在翻转group内节点的时候,我使用了数组栈。我的代码如下:
ListNode* reverseKGroup(ListNode* head, int k) {
int cnt = 0; // 计数
ListNode *sstack[k], *cursor; // 数组栈
ListNode dummy(0), *pre = &dummy, *p = head; // p为待翻转group的第一个节点
pre->next = head; // pre为p之前的节点
while (p) {
cnt = k;
cursor = p;
for (int i=0; i<k; i++) {
if (cursor == NULL) {
return dummy.next;
}
sstack[i] = cursor; // group内节点入栈
cursor = cursor->next;
}
for (int i=k-1; i>=1; i--) { // 翻转group内各节点
sstack[i]->next = sstack[i-1];
}
pre->next = sstack[k-1]; // 一些连接操作
p->next = cursor;
pre = p;
p = p->next;
}
return dummy.next;
}