您的位置:首页 > 其它

LeetCode-Partition List

2013-10-05 17:21 417 查看
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
.

class Solution {
public:
ListNode *partition(ListNode *head, int x) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(head==NULL)return NULL;
if(head->next==NULL)return head;
ListNode* temp=NULL;
ListNode* ptr=head;
while(ptr!=NULL&&ptr->val>=x){
temp=ptr;
ptr=ptr->next;
}
ListNode* ret;
if(ptr==NULL){
return head;
}
else if(ptr==head){
//do nothing
ret=head;
}
else{
if(temp!=NULL){
temp->next=ptr->next;
}
ptr->next=head;
ret=ptr;
}
ListNode* ptr2=ret;
while(ptr2->next!=NULL&&ptr2->next->val<x){
ptr2=ptr2->next;
//point to insert
}
ptr=ptr2;
while(ptr->next!=NULL){
if(ptr->next->val<x){
temp=ptr->next;
ptr->next=temp->next;
temp->next=ptr2->next;
ptr2->next=temp;
ptr2=ptr2->next;
}
else{
ptr=ptr->next;
}
}
return ret;
}
};


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: