/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} };*/ class Partition { public: ListNode* partition(ListNode* pHead, int x) { struct ListNode* lesshead,*lesstail,*greaterhead,*greatertail; lesshead = lesstail = (struct ListNode*)malloc(sizeof(struct ListNode)); greaterhead = greatertail = (struct ListNode*)malloc(sizeof (struct ListNode)); ListNode* cur = pHead; while(cur) { if(cur->val < x) { lesstail->next = cur; lesstail = lesstail->next; } else { greatertail->next = cur; greatertail = greatertail->next; } cur = cur->next; } lesstail->next = greaterhead->next; greatertail->next = NULL; pHead = lesshead->next; free(greaterhead); free(lesshead); return pHead; } };