您的位置:首页 > 其它

Partition List

2016-05-27 16:04 369 查看
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的值组成一个链表。遍历结束以后,将这两个链表链接到一起就可以了

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(head==NULL||head->next==NULL)
return head;
ListNode *little=new ListNode(0),*l1=little;
ListNode *bigger=new ListNode(0),*l2=bigger;
ListNode *p=head;
while(p)
{
if(p->val<x)
{
l1->next=p;
l1=p;
p=p->next;
}
else
{
l2->next=p;
l2=p;
p=p->next;
}
}
l1->next=bigger->next;
l2->next=NULL;
return little->next;

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