/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} };*/ class Partition { public: ListNode* partition(ListNode* pHead, int x) { // write code here if (!pHead || !pHead->next) return pHead; ListNode dummySmall(0); ListNode dummyLarge(0); ListNode* pSmall = &dummySmall; ListNode* pLarge = &dummyLarge; while (pHead) { if (pHead->val < x) { pSmall->next = pHead; pSmall = pSmall->next; } else { pLarge->next = pHead; pLarge = pLarge->next; } pHead = pHead->next; } pLarge->next = nullptr; pSmall->next = dummyLarge.next; return dummySmall.next; } };