您的位置:首页 > 其它

LeetCode_Partition List

2015-05-29 19:48 447 查看
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
.

代码:

struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* partition(ListNode* head, int x)
{
if(head==NULL) return NULL;
ListNode* begin = head;
ListNode* second = head->next;
ListNode* second_pre = head;
while(second!=NULL)
{
if(second->val < x)
{
if(begin==head&&begin->val >=x)//第一个节点就是比较大的节点
{
ListNode* head1 = new ListNode(second->val);
head1->next = head;
head = head1;
//删除second指向的节点
second_pre -> next = second -> next;
second = second_pre->next;
begin = head;

}
else if(second_pre->val < x)//连续两个都比较小
{
second_pre = second;
begin = second_pre;
second = second->next;
}
else
{

second_pre->next = second->next;
second->next = begin->next;
begin->next = second;
second = second_pre->next;
begin = begin ->next;
}
}
else
{
second_pre = second;
second = second->next;
}
}
return head;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: