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;
    }
    */
    };
  • 相关阅读:
    如何实现Android欢迎页
    创建webapi的简单步骤
    IOS里Request的斗争(上)
    预告:关于接下来的部分,都是番外。
    利用Selenium制作python数据抓取,以及对Selenium资源介绍
    利用openpyxl来读取Excel数据
    在pycharm下快速添加插件
    C# 分布式缓存服务器方案
    2014中国省市数据库
    FormsAuthentication 登录兼容 IE11 保存cookie
  • 原文地址:https://www.cnblogs.com/Vae1990Silence/p/4281408.html
Copyright © 2011-2022 走看看