Medium

Odd Even Linked ListC++

Full explanation · Time O(n) · Space O(1)

// Time:  O(n)
// Space: O(1)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* oddEvenList(ListNode* head) {
        if (head) {
            for (auto odd_tail = head, curr = head->next;
                 curr && curr->next;
                 curr = curr->next) {
                ListNode *even_head = odd_tail->next;
                odd_tail->next = curr->next;
                odd_tail = odd_tail->next;
                curr->next = odd_tail->next;
                odd_tail->next = even_head;
            }
        }
        return head; 
    }
};