/*struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        if (pHead == nullptr)
        {
            return nullptr;
        }

        ListNode* pTempGreater = new ListNode(0);
        ListNode* pTempLess = new ListNode(0);
        ListNode* pTempGreaterCopy = pTempGreater;
        ListNode* pTempLessCopy = pTempLess;

        for (ListNode* n = pHead; n != nullptr; n = n->next)
        {
             if (n->val >= x)//大于val的部分 放在后面
            {
                 pTempGreater ->next= new ListNode(n->val);//构造一个节点 然后粘贴到链上去,仅仅复制值
                 pTempGreater = pTempGreater->next;
            }
            else
            {
                 pTempLess->next = new ListNode(n->val);
                 pTempLess = pTempLess->next;
            }
        }
        pTempLess->next = pTempGreaterCopy->next;

        return pTempLessCopy->next;
    }
};