题解 | #牛群的编号重排#
牛群的编号重排
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; } };