题解 | #链表中的节点每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 指定区间反转 自己写的