[力扣c语言实现]86.分割链表

原题目连接

1. 题目描述

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5

2.代码如下

//2018-12-03
//思路:另起两条新链l1,l2,遍历当前链表,>=x的尾插l2,<x的尾插l1

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     struct ListNode *next;
* };
*/
struct ListNode* partition(struct ListNode* head, int x) {
    //保留相对位置
    typedef struct ListNode list;
    list *l1=malloc(sizeof(list));
    l1->next=NULL;
    list *head1=l1;
    list *l2=malloc(sizeof(list));
    l2->next=NULL;
    list *head2=l2;
    if(head==NULL)//保证至少有两个结点
    {
        return head;
    }
    while(head)
    {
        if(head->val<x)
        {//尾插l1
            l1->next=head;
            l1 = l1->next;//因为head一定不为null,所以l1一定不为null,同理l2
        }
        else
        {//尾插l2
            l2->next=head;
            l2 = l2->next;
        }
        head=head->next;
    }
    l1->next = head2->next;//接链
    head2->next=NULL;
    l2->next = NULL;
    return head1->next;
}
//注意内存泄漏
```c
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值