题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
ListNode* reverseKGroup(ListNode* head, int k) {
// write code here
//1.group
int kk = k;
ListNode* p = head;
ListNode* tail = nullptr;
while (p) {
ListNode* q = p;
while (kk > 1 && q->next) {
q = q->next;
kk--;
}
if (kk == 1) {
kk = k;
ListNode* temp = q->next;
q->next = nullptr;
if (tail) {
tail->next = reverse(p);
} else {
// the head after reverse
head = reverse(p);
}
tail = p;
p = temp;
} else {
// keep original type that no satisfy k group
if (tail) {
tail->next = p;
}
break;
}
}
return head;
}
ListNode* reverse(ListNode* head) {
ListNode* ptr = nullptr;
while (head) {
ListNode* next = head->next;
head->next = ptr;
ptr = head;
head = next;
}
return ptr;
}
};

