建两个链表来保存小于x和大于等于x的数,遍历链表,再将两个链表连接
这里需要注意一点,题目只分为两个部分,一个是小于x, 一个是大于等于x,所以不需要存在一个分隔点x在两个链表中间
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
ListNode* less_head = new ListNode(0);//建立链表,生成虚拟头结点,最后返回的是虚拟头结点的next
ListNode* more_head = new ListNode(0);
ListNode* less_cur = less_head;
ListNode* more_cur = more_head;
while(head){
if(head->val < x){
less_cur->next = head;
less_cur = head;
}
else{
more_cur->next = head;
more_cur = head;
}
head = head->next;
}
less_cur->next = more_head->next;
more_cur->next = NULL;
return less_head->next;
}
};