当前位置: 首页 > news >正文

单链表经典算法题之分割链表

给定一个头结点和一个值x,是链表中所有小于x的值都在x前面

 typedef struct ListNode ListNode;

struct ListNode* partition(struct ListNode* head, int x) {

    //思路一:在原链表上进行修改

    //思路二:创建新链表,使用哨兵位,比x大的尾插,比x小的头插

    //思路三:创建两个链表,一个是大链表,一个是小链表,都整一个哨兵位

    if(head == NULL)

    {

        return head;

    }

    ListNode* lesshead = (ListNode*)malloc(sizeof(ListNode));

    ListNode* greaterhead = (ListNode*)malloc(sizeof(ListNode));

    ListNode* lesstail = lesshead;

    ListNode* greatertail = greaterhead;

    ListNode* pcur = head;

    while(pcur)

    {

        if(pcur->val < x)

        {

            lesstail->next = pcur;

            lesstail = lesstail->next;

        }

        else

        {

            greatertail->next = pcur;

            greatertail = greatertail->next;

        }

        pcur = pcur->next;

    }

    //小链表的尾节点与大链表的第一个有效节点结合

    greatertail->next = NULL;//防止死循环,并将next指针初始化

    lesstail->next = greaterhead->next;

    ListNode* ret = lesshead->next;

   

    free(lesshead);

    free(greaterhead);

    lesshead = greaterhead = NULL;

    return ret;

}

//超出时间限制只有一种情况:就是代码出现了死循环

//创建新链表时,若进行尾插,则要考虑

相关文章:

  • SPRING AI 入门
  • TCN+Transformer+SE注意力机制多分类模型 + SHAP特征重要性分析,pytorch框架
  • Docker 网络模式
  • Golang启用.exe文件无法正常运行
  • SM4 与 AES 在 GPU 上的性能比较
  • GAN+ECA注意力机制实现图像超分辨率重建
  • 第七十九篇 大数据开发基石:堆数据结构解析与生活化应用
  • Vue3 计算属性 computed
  • 在macOS上运行Linux容器的方法
  • G1周打卡——GAN入门
  • linux 中pdf 的自动分页工具
  • 专题:2025年跨境B2B采购买家行为分析及采购渠道研究报告|附160+份报告PDF汇总下载
  • 【Go-补充】实现动态数组:深入理解 slice 与自定义实现
  • 2025年硬件实习/秋招面试准备
  • Cordova移动应用对云端服务器数据库的跨域访问
  • Python原生爬虫教程:微店商品详情API接口攻略指南
  • 手写muduo网络库(七):深入剖析 Acceptor 类
  • 如何正确评估服务器CPU/内存/IO利用率 (性能过剩or瓶颈)
  • SpringBoot后端开发知识点总结(持续更新)
  • Nginx(自用)
  • 网站开发的外文翻译/排名软件
  • 如何做企业网站步骤/网上推广怎么收费
  • 广电基础设施建设官方网站/seo与网络推广的区别和联系
  • 挂机宝做网站可以吗/社群营销方案
  • 代做ppt网站好/百度seo排名培训优化
  • 网站建设制作设计推广/如何查看百度搜索指数