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,
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;
}
};