(动画详解)LeetCode面试题 02.04.分割链表

💖💖💖欢迎来到我的博客,我是anmory💖💖💖
又和大家见面了
欢迎来到动画详解LeetCode系列
用通俗易懂的动画的动画使leetcode算法题可视化
先来自我推荐一波
个人网站欢迎访问以及捐款
推荐阅读
如何低成本搭建个人网站
专栏:动画详解leetcode算法题
C语言知识
玉桂狗听音乐


题目描述

题目描述


解题思路

本题可以通过两个链表来解决
一个链表是小链表,用来存储比x小的元素
一个链表是大链表,用来存储大于等于x的元素
最后再将大小链表首尾相接就可以了


动画详解

动画详解分解链表


代码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

typedef struct ListNode ListNode;

struct ListNode* partition(struct ListNode* head, int x)
{
    ListNode* lessHead, *lessTail;
    ListNode* greatHead,*greatTail;
    lessHead = lessTail = (ListNode*)malloc(sizeof(ListNode));
    greatHead = greatTail = (ListNode*)malloc(sizeof(ListNode));

    ListNode* pcur = head;
    while(pcur)
    {
        if(pcur->val<x)
        {
            // 插入到小链表中
            lessTail->next = pcur;// 这里的思想可以学习一下
            lessTail = lessTail->next;
        }
        else
        {
            // 插入到大链表中
            greatTail->next = pcur;
            greatTail = greatTail->next;
        }
        pcur = pcur->next;
    }
    // 把大链表的尾部置空,防止出现链表循环
    greatTail->next = NULL;
    // 大小链表首尾相接
    lessTail->next = greatHead->next;
    return lessHead->next;
}


注意事项

在这个代码中,如果不将greatHead->next置空的话,会导致死循环
因为最后一个greatHead->next会指向pcur中的一个元素,从而形成一个闭环导致运行超时


复杂度分析

本代码中仅有一个while循环,时间复杂度为O(n)


总结

💖💖💖非常感谢各位的支持💖💖💖
我们共同进步
本系列持续更新,关注我,带你手撕面试算法题
下期再见
玉桂狗吃东西

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿梦Anmory

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值