题解 | #牛群的编号重排#
牛群的编号重排
https://www.nowcoder.com/practice/2e4baac1b994494e83a7c0b17b97ac2d
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
void postInsert(ListNode& a, ListNode& b) {
ListNode* tmp = a.next;
a.next = &b;
b.next = tmp;
}
ListNode* reorderCows(ListNode* head) {
ListNode* evenNodeHead = nullptr;
ListNode* evenNodeRear = nullptr;
ListNode* oddNodeHead = nullptr;
ListNode* oddNodeRear = nullptr;
ListNode* tmpNode = head;
ListNode* tmpNode2;
int cnt = 1;
while (tmpNode != nullptr) {
tmpNode2 = tmpNode->next;
tmpNode->next = nullptr;
if (cnt % 2 == 0) {
if (evenNodeHead == evenNodeRear) {
if (evenNodeHead == nullptr) {
evenNodeHead = tmpNode;
evenNodeRear = tmpNode;
} else {
evenNodeRear = tmpNode;
evenNodeHead->next = evenNodeRear;
}
} else {
evenNodeRear->next = tmpNode;
evenNodeRear = tmpNode;
}
} else {
if (oddNodeHead == oddNodeRear) {
if (oddNodeHead == nullptr) {
oddNodeHead = tmpNode;
oddNodeRear = tmpNode;
} else {
oddNodeRear = tmpNode;
oddNodeHead->next = oddNodeRear;
}
} else {
oddNodeRear->next = tmpNode;
oddNodeRear = tmpNode;
}
}
tmpNode = tmpNode2;
cnt += 1;
}
oddNodeRear->next = evenNodeHead;
return oddNodeHead;
}
};
查看12道真题和解析