题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
ListNode* reverseKGroup(ListNode* head, int k) {
// write code here
if(head==nullptr)
{
return nullptr;
}
ListNode* aaa = new ListNode(-1); // 还是需要1个伪头部
aaa->next = head;
// 先统计下长度
int n = 1;
ListNode* cur = head;
while(cur->next!=nullptr)
{
cur=cur->next;
n++;
}
int m = n/k; // 多少组需要反转
cur = head;
ListNode* pre = aaa;
for(int b=1; b<m*k; b+=k)
{
// 区间是 [b,b+k-1]
int e = b+k-1;
for(int i = b; i<e; ++i) //内部就是BM2 指定区间反转
{
ListNode* tmp = cur->next;
cur->next = tmp->next;
tmp->next = pre->next;
pre->next = tmp;
}
pre = cur; //此时curr还在上一组的第二个 这里令pre为下一组的前驱
cur = cur->next; // 同时cur后移到该组第一个
}
return aaa->next;
}
};
按照BM2 指定区间反转 自己写的