86. 分隔链表
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,
使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
提示:
链表中节点的数目在范围 [0, 200] 内
-100 <= Node.val <= 100
-200 <= x <= 200
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* partition(struct ListNode* head, int x){
if(head==NULL) return head;
struct ListNode * newHead1=(struct ListNode*)malloc(sizeof(struct ListNode));
newHead1->next=NULL;
struct ListNode * newTail1 = newHead1;
struct ListNode *newHead2 =(struct ListNode*)malloc(sizeof(struct ListNode)) ;
newHead2->next=NULL;
struct ListNode * newTail2 = newHead2;
while(head)
{
if(head->val<x)
{
newTail1->next=head;
newTail1=newTail1->next;
head=head->next;
newTail1->next=NULL;
//goTail(newTail1,head);
}
else
{
newTail2->next=head;
newTail2=newTail2->next;
head=head->next;
newTail2->next=NULL;
printf("%d",newTail2->val);
// goTail(newTail2,head);
}
//head=head->next;
}
newTail1->next=newHead2->next;
free(newHead2);
head=newHead1->next;
free(newHead1);
return head;
}
总结 : 使用尾插法 开拓两个新的链表 分别赋值 再进行链接一起