96. 链表划分
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/*
* @param head: The first node of linked list
* @param x: An integer
* @return: A ListNode
*/
ListNode * partition(ListNode * head, int x) {
// write your code here
if (head == NULL) {
return head;
}
ListNode *p1 = new ListNode(0), *p2 = new ListNode(0);
ListNode *p3 = p1, *p4 = p2;
while (head != NULL) {
if (head->val < x) {
p1->next = head;
p1 = p1->next;
} else {
p2->next = head;
p2 = p2->next;
}
head = head->next;
}
p2->next = NULL;
if (p4 != NULL) {
while (p4) {
p4 = p4->next;
p1->next = p4;
p1 = p1->next;
}
} else {
p1->next = NULL;
}
return p3->next;
}
};