题解 | #链表中的节点每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;
}
查看16道真题和解析