题目:
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.
第一步,判断一下head==NULL的情况
第二步,因为题目没有对空间有要求,所以想到新建一条链表,自然而然想到将原链表拆分成两条
一条小于X,一条大于X,然后连起来
然后TLE了,这道题的坑在于如果原链表最后一个数是小于X的,新链表的尾结点将不会指向NULL
所以以后在拆分链表时一定要注意尾结点是否指向NULL
class Solution {
public:
ListNode *partition(ListNode *head, int x) {
if(head==NULL) return head;
ListNode *lnode=new ListNode(-1);
ListNode *rnode=new ListNode(-1);
ListNode *lh=lnode,*rh=rnode;
ListNode *p=head;
while(p!=NULL){
if(p->val<x){
lh->next=p;
lh=lh->next;
}
else{
rh->next=p;
rh=rh->next;
}
p=p->next;
}
rh->next=NULL;//一定要设置NULL
lh->next=rnode->next;
return lnode->next;
}
};
本文介绍了一种链表分区算法的实现方法,该算法能够确保所有小于给定值x的节点出现在大于等于x的节点之前,并保持原有的相对顺序。通过创建两个虚拟头节点来分别收集小于x和大于等于x的节点,最后将两部分连接起来形成完整的链表。

230

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



