题目:
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的移至右边,是单纯的链表拆分和链接的操作。
ListNode *partition(ListNode *head, int x)
{
ListNode *p=head;
if(head ==NULL) return head;
int length=1;
for(length=1;p->next != NULL; length++ ) //找到长度
p=p->next; //最后节点
ListNode *N=new ListNode(0);
N->next=head; //在头结点之前新增一节点
ListNode *t=N;
for(int j=0; j<length && length>1 ;j++)
{
if(t->next->val >= x)
{
p->next=t->next; //链表交换
p=p->next;
t->next =t->next->next;
p->next=NULL;
}
else t=t->next;
}
return N->next;
}