您的位置:首页 > 编程语言 > C语言/C++

LeetCode 之 Partition List — C++ 实现

2015-06-13 17:20 399 查看
Partition List

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
.
给定一个链表和一个值 x,将其分区使 x 后面的节点值全部大于等于 x。
必须保证原来值的相对顺序。

分析:

    从表头开始扫描,小于 x 的值跳过,遇到大于等于 x 的值则向后查找小于 x 的值,然后插入到大于等于 x 值的前面。

class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(!head)
{
return NULL;
}

ListNode *tempHead = new ListNode(0);
tempHead->next = head;
ListNode *pre = tempHead, *p = head, *pr = NULL, *cur = NULL;

while(p)
{
if(p->val < x) //val < x, 继续向后搜索
{
pre = pre->next;
p = p->next;
}
else //val > x
{
pr = pre->next; //pr记录 val < x 的前一个节点
p = p->next;
while(p && p->val >= x)
{
pr = pr->next;
p = p->next;
}
if(p)//找到 val < x 的节点
{
pr->next = p->next;
p->next = pre->next;
pre->next = p;

pre = pre->next;
p = pre->next;
}
}
}

head = tempHead->next;
delete tempHead;

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