题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param k int整型 * @return ListNode类 */ struct ListNode* reverseKGroup(struct ListNode* head, int k ) { int nr_node = 0; int cnt = 1; struct ListNode* curr = head; struct ListNode* prev = NULL; struct ListNode* next = NULL; struct ListNode* first = NULL; struct ListNode* left = NULL; struct ListNode* right = NULL; while (curr) { curr = curr->next; nr_node++; } if (nr_node < k || k <= 1 || nr_node <= 1) { return head; } else { curr = head; } while (curr) { next = curr->next; if (cnt % k == 1) { left = prev; first = curr; prev = curr; if (nr_node > k && nr_node - cnt < k - 1) break; } else if (cnt % k == 0) { first->next = next; if (left) { left->next = curr; } else { head = curr; } curr->next = prev; prev = first; } else { curr->next = prev; prev = curr; } cnt++; curr = next; } return head; }