题目大意:
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3 输出: 1->2->2->4->3->5
题目分析:将所有小于x的节点保存在一个链表中,将大于等于x的节点保存在一个链表中,然后将两个链表接起来就可以了。
代码展示:
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(head == NULL || head->next == NULL)
return head;
ListNode* small = new ListNode(-1);
ListNode* big = new ListNode(-1);
ListNode* smallHead = small;
ListNode* bigHead = big;
while(head!=NULL){
if(head->val<x){
small->next = head;
small = small->next;
}
else{
big->next = head;
big = big->next;
}
head = head->next;
}
small->next = bigHead->next;
big->next = NULL;
return smallHead->next;
}
};