题目
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的放到另外一条链表,最后拼接即可
代码
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(head == NULL)
return head;
ListNode* less = new ListNode(0);
ListNode* more = new ListNode(0);
ListNode* less_p = less, *more_p = more;
while(head != NULL){
if(head->val < x){
less_p->next = head;
less_p = less_p->next;
}else{
more_p->next = head;
more_p = more_p->next;
}
head = head->next;
}
more_p->next = NULL;
less_p->next = more->next;
ListNode* p= less->next;
return less->next;
}
};