Saturday, May 11, 2013

Leetcode: Partition List in C++



Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal tox.
You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

Solution:
ListNode *partition(ListNode *head, int x) {
        ListNode* left = new ListNode(0);
        ListNode* right = new ListNode(0);
        ListNode* headL = left;
        ListNode* headR = right;
        while(head)
        {
            if(head->val<x)
            {
                left->next = head;
                head = head->next;
                left = left->next;
                left->next = NULL;
            }
            else
            {
                right->next = head;
                head = head->next;
                right = right->next;
                right->next = NULL;
            }
        }
        left->next = headR->next;
        headR->next = NULL;
        delete headR;
        ListNode* result = headL->next;
        delete headL;
        return result;
    }

No comments:

Post a Comment