题目描述
给出一个链表和一个值x,以x为参照将链表划分成两部分,使所有小于x的节点都位于大于或等于x的节点之前。
两个部分之内的节点之间要保持的原始相对顺序。
例如:
给出1->4->3->2->5->2和x = 3,
返回1->2->2->4->3->5.
解题思路
/**
* 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) {
if(head == NULL)
return NULL;
ListNode *h1 = new ListNode(0);
ListNode *h2 = new ListNode(0);
ListNode *p = head;
ListNode *p1 = h1, *p2 = h2;
while(p){ //开始拆分原链表
if(p->val < x){ //小的放在h1链表
p1->next = p;
p1 = p;
}
else{
p2->next = p;
p2 = p;
}
p = p->next;
}
p1->next = h2->next; //将h2链接在p1后
p2->next = NULL; //p2后接NULL
return h1->next; //返回头结点之后的链表
}
};