141-解决链表partition

题目:
给定一个链表和一个特定值 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;//返回合成后的新链的头结点 
    
}

演示图如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LINZEYU666/article/details/112862513