题目:
Given a linked list and a value x, partition it such that all nodes less thanx 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
.
分析:要注意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;
}