码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 带哨兵位的单链表


    认识

    链表分为两种:带头结点的和不带头结点的

    之前我们学习了不带哨兵位的单链表,并实现了相关代码

    现在我们认识一下带哨兵位头结点的单链表:

    plist指向带哨兵位的头结点

    这个结点不存储有效数据

    如果为空链表:

    • 不带头:plist指向NULL
    • 带头:plist指向head,一定不会指向NULL 

    优势

    带哨兵位的单链表也有他自己的优势,我们用一道题来证明一下:

     链表分割_牛客题霸_牛客网 (nowcoder.com)

    题目描述:

    题目分析 

    假设有下面这个链表,给定数字5

    那么排序后就是这样,不改变原来是数据顺序

    可以分割成两个链表,plist1和plist2,小于x的结点尾插到plist1,否则尾插到plist2

    当链表的数据全部尾插结束后,将plist2头结点尾插到plist1,这个时候带哨兵位的头结点就非常有优势了

    我们可以定义两个头结点head和head2,分别作为两个链表的哨兵位,再定义两个尾结点tail1和tail2方便两个链表的尾插,定义cur遍历链表,和x值做比较

    代码示例

    我们思路清晰了就可以写代码了:

    1. /*
    2. struct ListNode {
    3. int val;
    4. struct ListNode *next;
    5. ListNode(int x) : val(x), next(NULL) {}
    6. };*/
    7. #include
    8. class Partition {
    9. public:
    10. ListNode* partition(ListNode* pHead, int x) {
    11. // write code here
    12. struct ListNode* head1,* head2,* tail1,* tail2;
    13. head1=(struct ListNode*)malloc(sizeof(struct ListNode));
    14. head2=(struct ListNode*)malloc(sizeof(struct ListNode));
    15. tail1=head1;
    16. tail2=head2;
    17. struct ListNode* cur=pHead;
    18. while(cur)
    19. {
    20. if(cur->val
    21. {
    22. tail1->next=cur;
    23. tail1=tail1->next;
    24. }
    25. else
    26. {
    27. tail2->next=cur;
    28. tail2=tail2->next;
    29. }
    30. cur=cur->next;
    31. }
    32. tail1->next=head2->next;
    33. tail2->next=NULL;
    34. pHead=head1->next;
    35. free(head1);
    36. free(head2);
    37. return pHead;
    38. }
    39. };

     由于该题只能用c++,但是我们可以完全按照C语言的语法规则写内部,最后就可以通过了;

  • 相关阅读:
    jvm关闭时的钩子函数
    centos7下docker的安装
    jar包,引入依赖
    Java并发编程: Thread常见方法
    单日 5000 亿行 / 900G 数据接入,TDengine 3.0 在中国地震台网中心的大型应用
    205、使用消息队列实现 RPC(远程过程调用)模型的 服务器端 和 客户端
    使用rest — assured框架优雅实现接口测试断言
    HDU - 2859 Phalanx(DP)
    高级工程师评审:高级工程师有哪些专业?高级工程师职称专业分类
    pytest一些常见的插件
  • 原文地址:https://blog.csdn.net/m0_74722801/article/details/134484671
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号