Partition List

来源:互联网 发布:淘宝电影票团购 编辑:程序博客网 时间:2024/06/08 09:16

题目:

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

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.

分析:要注意head1==head2这种问题。

代码如下:

        ListNode *partition(ListNode *head, int x) {
        if(head==NULL)return head;
        ListNode *head1=head;
        if(head->val>=x)
        {
            while(head1->next!=NULL&&head1->next->val>=x)
            {
                head1=head1->next;
            }
            if(head1->next==NULL)
            {
                return head;
            }
            else
            {
                ListNode *tmp=head1->next;
                head1->next=head1->next->next;
                tmp->next=head;
                head=tmp;
            }
        }
        ListNode *head2=head;
        while(head1->next!=NULL)
        {
            while(head1->next!=NULL&&head1->next->val>=x)
            {
                head1=head1->next;
            }
            if(head1->next==NULL)
            {
                return head;
            }
            if(head1==head2)
            {
                head1=head1->next;
                head2=head2->next;
            }

            else
            {
                ListNode *tmp=head1->next;
                head1->next=head1->next->next;
                tmp->next=head2->next;
                head2->next=tmp;
                head2=tmp;
            }
        }  
        return head;
    }