码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Leetcode】拿捏链表(三)——CM11 链表分割(牛客)、OR36 链表的回文结构(牛客)


     作者:一个喜欢猫咪的的程序员 

    专栏:《Leetcode》

    喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》


    目录

    CM11 链表分割

    OR36 链表的回文结构


    CM11 链表分割

    链表分割_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70题目:

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


    示例:

    本题没有示例


    思路:

    本题我们利用两个guard1、guard2带头的链表,将他们合成一个链表来完成。

    我们开辟一个链表结构体struct ListNode大小的动态空间n1、n2,将其强制类型转换为结构体指针struct ListNode*来将题目给的链表分为两个小链表。

    我们让n1和guard1指向同一块动态空间,n2和guard2也是同理。

    我们利用一个cur来遍历原链表,如果val比x小就尾插到第一个链表n1中,负责尾插到第二个链表n2中。

     我们需要额外考虑一种情况,当第二个链表的尾不是原链表的最后一个时,n2的next不为空会出现环装链表的问题,我们需要将n2.next=NULL。

    时间复杂度:O(N)                                                             空间复杂度:O(N)


    代码实现:

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

    OR36 链表的回文结构

    链表的回文结构_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa题目:

    对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。


    示例:


    思路:

    本题要求我们必须在O(1)的空间复杂度,因此我们不能去开数组,将他们一个个存起来。

    我们可以将链表的后半段逆置,然后再将中间节点与头结点的元素做比较,判断是否相等。

    这里逆置和查找中间节点的函数可以看一下我的另外2篇博客:

    http://t.csdn.cn/82sv7http://t.csdn.cn/82sv7http://t.csdn.cn/HAJ2Ahttp://t.csdn.cn/HAJ2A时间复杂度:O(N)                                                               空间复杂度:O(1)


    代码实现:

    1. class PalindromeList {
    2. public:
    3. struct ListNode* reverseList(struct ListNode* head){
    4. if (head == NULL || head->next == NULL) {
    5. return head;
    6. }
    7. struct ListNode*newhead=reverseList(head->next);
    8. head->next->next=head;
    9. head->next=NULL;
    10. return newhead;
    11. }
    12. struct ListNode* middleNode(struct ListNode* head){
    13. if(head->next==NULL)
    14. {
    15. return head;
    16. }
    17. struct ListNode*left=head;
    18. struct ListNode*right=head;
    19. struct ListNode*ans=head;
    20. while(right!=NULL&&right->next!=NULL)
    21. {
    22. left=left->next;
    23. right=right->next->next;
    24. }
    25. ans=left;
    26. return ans;
    27. }
    28. bool chkPalindrome(ListNode* A) {
    29. // write code here
    30. struct ListNode*mid=middleNode(A);
    31. struct ListNode*rhead=reverseList(mid);
    32. while(A&&rhead)
    33. {
    34. if(A->val!=rhead->val)
    35. return false;
    36. A=A->next;
    37. rhead=rhead->next;
    38. }
    39. return true;
    40. }
    41. };

  • 相关阅读:
    关于网络基础知识一下问题
    利用kubernetes中的leader选举机制来完成自己的HA应用
    【Vue】组件通信与方法暴露实践
    高级Android开发工程师
    2.MySQL 安装
    2.6.5
    SQLi-LABS Page-2 (Adv Injections)
    计算机毕业设计(附源码)python智慧党建信息系统
    MySQL主从复制与读写分离
    依赖的aar包跟项目jdk版本不一致问题
  • 原文地址:https://blog.csdn.net/m0_69061857/article/details/128007616
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号