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;
}