给定一个链表和一个特定值 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;
}