zoukankan      html  css  js  c++  java
  • leetcode[86]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.

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
     ListNode *partition(ListNode *head, int x) {
        if(head==NULL||head->next==NULL)return head;
        ListNode *newhead=new ListNode(INT_MIN);
        ListNode *p=newhead;
        p->next=head;
        head=p;
        ListNode *tmp=head;
        ListNode *min2;
        ListNode *max1;
        ListNode *max2;
        while (tmp!=NULL&&tmp->val<x)
        {
            min2=tmp;
            tmp=tmp->next;
        }
        if (tmp!=NULL&&tmp->val>=x)
        {
            max1=tmp;
            max2=tmp;
            tmp=tmp->next;
        }
        while(tmp!=NULL)
        {
            if (tmp->val>=x)
            {
                max2=tmp;
                tmp=tmp->next;
            }
            else
            {
                ListNode *ptmp=tmp->next;
                max2->next=tmp->next;
                min2->next=tmp;    
                tmp->next=max1;
                min2=min2->next;
                tmp=ptmp;
            }
        }
        return newhead->next;
    }
    /*
    ListNode *partition(ListNode *head, int x) {
        if(head==NULL||head->next==NULL)return head;
        ListNode *left=new ListNode(0);
        ListNode *pleft=left;
        ListNode *right=new ListNode(0);
        ListNode *pright=right;
        ListNode *tmp=head;
        while(tmp!=NULL)
        {
            if(tmp->val<x)
            {
                pleft->next=tmp;
                pleft=pleft->next;
            }
            else
            {
                pright->next=tmp;
                pright=pright->next;
            }
            tmp=tmp->next;
        }
        pright->next=NULL;
        pleft->next=right->next;
        return left->next;
    }
    */
    };
  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/Vae1990Silence/p/4281408.html
Copyright © 2011-2022 走看看