给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入:head = 1->4->3->2->5->2, x = 3
输出:1->2->2->4->3->5
1.双链表法
/**
* 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 * pre, *post, *tp1, *tp2;会报错出现空
ListNode *pre, *post, *tp1 = new ListNode, *tp2 = new ListNode;
pre = tp1;post =tp2;//不需要初始头在什么位置,找到就行
while(head != NULL){
if(head->val < x){
tp1->next = head;
tp1 = head;//tp1->next
}
else{
tp2->next = head;
tp2 = head;//tp2->next
}
head = head->next;
}
tp2->next = NULL;//收尾
tp1->next = post->next;
return pre->next;
}
};