题解 | #链表的奇偶重排#
链表的奇偶重排
https://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if (!head || !head->next) return head;
auto oh = head, ot = oh; // 奇数头和尾
auto eh = head->next, et = eh; // 偶数头和尾
for (auto p = head->next->next; p; ) {
ot = ot->next = p; // 当前p为奇数点
p = p->next; // p往后走一格
if (p) { // p不空说明此时p是偶数
et = et->next = p; // 当前p为偶数数点
p = p->next; // p往后走一格
}
}
// 偶数放奇数后面
ot->next = eh; // 让奇数结点next指向偶数结点的头结点
et->next = NULL; // 让偶数结点next最后指向空
return oh;
}
};