牛客 CM11.链表分割

CM11 链表分割

题目链接:链表分割_牛客题霸_牛客网

题目描述:现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition 
{
public:
    ListNode* partition(ListNode* pHead, int x) 
    {
        //创建一个小链表一个大链表
        ListNode* lessHead,* lessTail;
        lessHead = lessTail = (ListNode*)malloc(sizeof(ListNode));

        ListNode* greaterHead,* greaterTail;
        greaterHead = greaterTail = (ListNode*)malloc(sizeof(ListNode));

        //遍历链表
        ListNode* pur = pHead;
        while (pur)
        {
            //小于指定值,尾插进小链表
            if (pur->val < x)
            {
                lessTail->next = pur;
                lessTail = lessTail->next;
                pur = pur->next;
            }

            //大于等于指定值,尾插进大链表
            else
            {
                greaterTail->next = pur;
                greaterTail = greaterTail->next;
                pur = pur->next;
            }
        }
        greaterTail->next = NULL;
        
        //连接并处理大小链表
        lessTail->next = greaterHead->next;
        ListNode* ret = lessHead->next;
        free(lessHead);
        free(greaterHead);
        lessHead = NULL;
        greaterHead =  NULL;

        return ret;
    }
};

解题思路:

  • 新建一个大链表,一个小链表
  • 开始遍历原链表,将小于x的值尾插进小链表,将大于等于x的值尾插进大链表
  • 最后将小链表的为节点和大链表的头结点连接,最后将大链表的尾结点置为NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值