86 分隔链表

85 阅读1分钟
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        if (head==nullptr||head->next==nullptr) return head;
        ListNode big;
        ListNode small;
        ListNode *p=head;
        ListNode *pb=&big;
        ListNode *ps=&small;
        ListNode *q=nullptr;
        while(p){
            q=p->next;
            if((p->val)<x){
                p->next=pb->next;
                pb->next=p;
                pb=p;
            }
            else{
                p->next=ps->next;
                ps->next=p;
                ps=p;
            }
            p=q;
        }
        pb->next=small.next;
        return big.next;


    }
};

思路:新建big small 两个链表 一个存储小于x的结点,另一个存储大于X的结点,最后再接起来