您的位置:首页 > 其它

Partition List

2013-11-09 17:42 162 查看
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
.

思路:

用两个指针less和greater分别保存小于x和大于x的列表,然后遍历一遍,一边遍历一边更新这两个指针。

代码:

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;
ListNode *less=NULL, *greater=NULL;
ListNode *newhead = head, *greaterhead = NULL;
while(head){
ListNode *tmp = head->next;
if(head->val < x){
if(less == NULL){
less = head;
newhead = less;
}
else{
head->next = less->next;
less->next = head;
less = less->next;
}
}
else{
if(greater == NULL){
greaterhead = head;
greater = head;
greater->next = NULL;
}
else{
greater->next = head;
greater = greater->next;
greater->next = NULL;
}
}
head = tmp;
}
if(less)
less->next = greaterhead;
return newhead;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: