1.分隔链表
给定一个链表和一个特定值x,对链表进行分隔,使得所有小于x的节点都在大于或等于x的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
思路:遍历链表,碰到大于或等于目标值的,则将节点接在链表尾部
ListNode* partition(ListNode* head, int x) {
ListNode* tail = head;
ListNode* pre = new ListNode(0);
pre -> next = head;
ListNode* cur = head;
head = pre;
int num = 1;
if(tail == nullptr || tail -> next == nullptr)
{
return head -> next;
}
while(tail -> next != nullptr)
{
num++;
tail = tail -> next;
}
ListNode* end = tail;
for(int i = 0; i < num; i++)
{
if(i == num - 1 && cur -> next == nullptr)
{
break;
}
if(cur -> val < x)
{
pre = cur;
cur = cur -> next;
}
else
{
pre -> next = cur -> next;
cur -> next = nullptr;
tail -> next = cur;
tail = tail -> next;
cur = pre -> next;
}
}
return head -> next;
}