1. 程式人生 > 實用技巧 >LeetCode 328 奇偶連結串列

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;
    }
};