主要思想:把大于x的值放到一个链表,小于x的值放到一个链表,然后再把两个链表合起来。

/*
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, *greathead, *greattail;
        lesshead = lesstail = (struct ListNode*)malloc(sizeof(struct ListNode));
        lesshead->next = NULL;
        greathead = greattail = (struct ListNode*)malloc(sizeof(struct ListNode));
        greathead->next = NULL;
        ListNode* cur = pHead;
        while (cur) {
            if (cur->val < x) {
                lesstail->next = cur;
                lesstail = cur;
            } else {
                greattail->next = cur;
                greattail = cur;
            }
            cur = cur->next;
        }
        // cout<<"%d"<<lesshead->next->val<<endl;
        
        lesstail->next = greathead->next;
        greattail->next = NULL;

struct ListNode* newhead = lesshead->next;//要后创建,不然lesshead->next为空的结果就不能通过
        free(lesshead);
        free(greathead);

        return newhead;
    }
};