LeetCode-Partition List

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

class Solution {
public:
    ListNode *partition(ListNode *head, int x) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        if(head==NULL)return NULL;
        if(head->next==NULL)return head;
        ListNode* temp=NULL;
        ListNode* ptr=head;
        while(ptr!=NULL&&ptr->val>=x){
            temp=ptr;
            ptr=ptr->next;
        }
        ListNode* ret;
        if(ptr==NULL){
            return head;
        }
        else if(ptr==head){
            //do nothing
            ret=head;
        }
        else{
            if(temp!=NULL){
                temp->next=ptr->next;
            }
            ptr->next=head;
            ret=ptr;
        }
        ListNode* ptr2=ret;
        while(ptr2->next!=NULL&&ptr2->next->val<x){
            ptr2=ptr2->next;
            //point to insert
        }
        ptr=ptr2;
        while(ptr->next!=NULL){
            if(ptr->next->val<x){
                temp=ptr->next;
                ptr->next=temp->next;
                temp->next=ptr2->next;
                ptr2->next=temp;
                ptr2=ptr2->next;
            }
            else{
                ptr=ptr->next;
            }
        }
        return ret;
    }
};
View Code
原文地址:https://www.cnblogs.com/superzrx/p/3352606.html