题目:
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;
}
本文介绍了一种链表分隔算法,该算法可以将链表中小于特定值x的节点放置在所有大于等于x的节点之前,同时保持原有的相对顺序不变。通过具体的C++代码实现展示了如何操作链表节点来完成这一任务。
407

被折叠的 条评论
为什么被折叠?



