题解 | #链表的奇偶重排#

链表的奇偶重排

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;
    }
};
全部评论

相关推荐

01-31 22:26
已编辑
杭州电子科技大学 Java
点赞 评论 收藏
分享
nbdy:她的意思是,有的话就有,没有的话就没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务