/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} };*/ class Partition { public: ListNode* partition(ListNode* pHead, int x) { ListNode* gGuard, *gTail, *lGuard, *lTail; gGuard = gTail = (ListNode*)malloc(sizeof(ListNode)); lGuard = lTail = (ListNode*)malloc(sizeof(ListNode)); gGuard->next=gTail->next=lGuard->next=lTail->next=nullptr; ListNode* cur = pHead; while (cur) { if (cur->val < x) { lTail->next = cur; lTail = lTail->next; }else { gTail->next = cur; gTail = gTail->next; } cur = cur->next; } gTail->next=nullptr; lTail->next = gGuard->next; pHead=lGuard->next; //free(gGuard); //free(lGuard); return pHead; } };