题目:
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
解题思路:
第一步:将链表拆分成两部分链表,一部分是小于X的节点,另外一部分是大于等于x的节点。
第二步:拼装链表
ListNode *partition(ListNode *head, int x)
{
ListNode *head1 = new ListNode(0);//申请一个结点并初始化为0
ListNode *head2 = new ListNode(0);//申请一个结点并初始化为0
//将小于x的挂到head1上面 大于等于x的挂head2上面
ListNode *p= head1, *q= head2;
while (head != NULL)
{
if (head->val < x)//val值小于x
{
p->next = head;
p = p->next;
}
else//val值大于等于x
{
q->next = head;
q= q->next;
}
head = head->next;//头结点向后移动
}
p->next = head2->next;//两个子链进行拼接
q->next = NULL;//尾结点的next置为空
return head1->next;//返回合成后的新链的头结点
}
演示图如下: