LeetCode 86. 分隔链表

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。

你应当保留两个分区中每个节点的初始相对位置

首先定义两个指针p1和p2
p1 表示小于x的链表
p2 表示大于等于x的链表
p1和p2会在程序运行中一直添加节点最后会指向最后的节点,所以我们还需要定义两个指向p1和p2头地址的指针 p3和p4
从head节点开始循环,直到为空结束,把小于x的值加在p1上 p1->next=head,否则
p2->next=head,最后把两个链表连起来,
返回p1链表的头指针

示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5

struct ListNode {
     int val;
     struct ListNode *next;
};
 
struct ListNode* partition(struct ListNode* head, int x){

    struct ListNode p3;
    struct ListNode p4;
    struct ListNode * p1 = NULL;
    struct ListNode * p2 = NULL;

    p3.next = p4.next = NULL;
    p1 = &p3; 
    p2 = &p4;
    while(head){
        if(head->val < x){
            p1->next = head;
            p1 = p1->next;
        }else{
            p2->next = head;
            p2 = p2->next;
        }
        head = head->next;
    }
    p2->next = NULL;
    p1->next = p4.next;
    return p3.next;
}

你可能感兴趣的:(LeetCode 86. 分隔链表)