less than 1 minute read

<-M 86> Partition List

/**
 * 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) {}
 * };
 */

// Method 1
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode left_temp(-1);
        ListNode right_temp(-1);

        ListNode* left_cur = &left_temp;
        ListNode* right_cur = &right_temp;

        for(ListNode *cur = head; cur; cur = cur->next) {
            if(cur->val < x) {
                left_cur->next = cur;
                left_cur = cur;
            } else {
                right_cur->next = cur;
                right_cur = cur;
            }
        }
        left_cur->next = right_temp.next;
        right_cur->next = nullptr;

        return left_temp.next;
    }
};

// Method 2
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        queue<int> q1;
        queue<int> q2;
        ListNode* curr = head;
        int count = 0;

        while(curr != NULL) {
            if(curr->val < x)
                q1.push(curr->val);
            else
                q2.push(curr->val);
            curr = curr->next;
            count++;
        }
        curr=head;
        while(!q1.empty()) {
            curr->val = q1.front();
            q1.pop();
            curr = curr->next;
        }

        while(!q2.empty()) {
            curr->val = q2.front();
            q2.pop();
            curr = curr->next;
        }
        return head;
    }
};