编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。
示例:
输入: head = 3->5->8->5->10->2->1, x = 5
输出: 3->1->2->10->5->5->8
额外定义两个指针,分别存小于和大于等于的链表。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
ListNode *lHead = new ListNode(), *rHead = new ListNode();
ListNode *l = lHead, *r = rHead;
while(head != NULL) {
if(head -> val < x) {
l -> next = head;
l = l -> next;
} else {
r -> next = head;
r = r -> next;
}
head = head -> next;
}
r -> next = NULL;
l -> next = rHead -> next;
return lHead -> next;
}
};