Odd Even Linked List
第10天,今天的題目總感覺做過,但是翻記錄又沒有,難道是在學校的OJ上做的???
今天的題目是Odd Even Linked List 。
好久沒碰到連結串列的題了,這題比較簡單。我們用一個新的連結串列來存奇數位的元素即可,而且這裡沒必要重新建立一個連結串列,只需要把原來連結串列裡面的連線過來就好了,完成後,自然就把一個連結串列分成兩個連結串列了。
區分奇偶數位,可以用一個 flag 來標識當前元素是奇數還是偶數,然後每移動一次就翻轉該 flag ,當然更簡單的是,我們迴圈一次移動兩個元素,這樣看起來會簡潔一點,而且在迴圈內部不需要任何的條件判斷,只需要在迴圈結束後做一些後處理即可。
class Solution { public: ListNode* oddEvenList(ListNode* head) { if (head == nullptr || head->next == nullptr) return head; ListNode even(0); ListNode *p = head; ListNode *q = &even; while(p->next && p->next->next) { q->next = p->next; p->next = p->next->next; p = p->next; q = q->next; } if (p->next != nullptr) { q->next = p->next; q = q->next; } p->next = even.next; q->next = nullptr; return head; } };