LeetCode 328 奇偶链表

LeetCode 328 奇偶链表

https://leetcode-cn.com/problems/odd-even-linked-list/

将链表分成奇数节点和偶数节点这两类链表,然后将偶数节点这个链表链接到奇数节点这个链表的后面即可。相较于力扣官方提供的题解,下面的代码中多了一个变量cnt用于记录所遍历到节点的序号,根据序号的奇偶性将当前节点挂到相应的链表之上。看个人吧,我觉得下面的代码要比官方题解更好理解一点。需要注意的是务必将偶数节点链表的最后一个节点(排序后链表的最后一个节点)的next给赋值为nullptr,否则力扣在判题的过程中会报错。

class Solution {
public:
    ListNode* oddEvenList(ListNode* head) {
        ListNode even(0), odd(0);
        ListNode *peven = &even;    // 偶
        ListNode *podd = &odd;      // 奇

        int cnt = 1;
        for (ListNode *p = head; p != nullptr; p = p->next) {
            if (cnt % 2) {
                podd->next = p;
                podd = podd->next;
            }
            else {
                peven->next = p;
                peven = peven->next;
            }
            ++cnt;
        }

        // do NOT forget this step
        peven->next = nullptr;
        podd->next = even.next;
        return odd.next;
    }
};
原文地址:https://www.cnblogs.com/wallace-lai/p/13968544.html