文章目录

  • 前言
  • 1.链表的分割
  • 2.链表的回文结构
  • 3.相交链表
  • 4.环形链表
  • 5. 环形链表2

前言


1.链表的分割

class Partition {public:ListNode* partition(ListNode* pHead, int x) {ListNode* smalltail, *smallhead;ListNode* bigtail, *bighead;smallhead = smalltail = (ListNode*)malloc(sizeof(ListNode));bighead = bigtail = (ListNode*)malloc(sizeof(ListNode));ListNode* cur = pHead;while(cur){if(cur->val < x){smalltail->next = cur;smalltail = smalltail->next;}else{bigtail->next = cur;bigtail = bigtail->next;}cur = cur->next;}smalltail->next=bighead->next;bigtail->next=NULL;pHead=smallhead->next;free(smallhead);free(bighead);return pHead;}
};

2.链表的回文结构

class PalindromeList {public:bool chkPalindrome(ListNode* A) {if(A==NULL)return false;else if(A->next==NULL)return true;struct ListNode*fast=A;struct ListNode*slow=A;while (fast&&fast->next) {slow = slow->next;fast = fast->next->next;}struct ListNode*cur=slow;struct ListNode*rhead=NULL;while(cur){struct ListNode*next=cur->next;cur->next=rhead;rhead=cur;cur=next;}while(A&&slow){if((A->val)!=(rhead->val)){return false;}A=A->next;slow=slow->next;}return true;}
};

3.相交链表

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{struct ListNode *curA=headA,*curB=headB;int lenA=0;int lenB=0;while(curA->next){++lenA;curA=curA->next;}while(curB->next){++lenB;curB=curB->next;}if(curA!=curB){return NULL;}int pos=abs(lenA-lenB);struct ListNode *longlist=headA,*shortlist=headB;if(lenA<lenB){longlist=headB;shortlist=headA;}while(pos--){longlist=longlist->next;}while(longlist!=shortlist){longlist=longlist->next;shortlist=shortlist->next;}return shortlist;}

4.环形链表

我们可以定义两个指针,一个速度为2,一个速度为1,这样就成了追及问题,如果能追上就代表有环

bool hasCycle(struct ListNode *head)
{struct ListNode *slow=head;struct ListNode *fast=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;if(slow==fast)return true;}return false;
}

思路很简单轻松实现

5. 环形链表2


这道题让我们来找到进入循环的点,我们先来记住一个二级结论,一个指针从链表头开始走,另一个和指针从快慢指针相遇的地方走,他们相遇的点就是进入循环的点
我们先来代码实现一下

struct ListNode *detectCycle(struct ListNode *head)
{struct ListNode *slow=head;struct ListNode *fast=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;if(slow==fast){struct ListNode *meet=slow;while(meet!=head){head=head->next;meet=meet->next;}return meet;}}return NULL;
}

接下来我们来证明这个结论

链表的经典习题(画图详解)相关推荐

  1. 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...

  2. python创建双链表_Python双链表原理与实现方法详解

    本文实例讲述了Python双链表原理与实现方法.分享给大家供大家参考,具体如下: Python实现双链表 文章目录 Python实现双链表 单链表与双链表比较 双链表的实现 定义链表节点 初始化双链表 ...

  3. php单链表检测有没有环,PHP找出链表中环入口节点步骤详解

    这次给大家带来PHP找出链表中环入口节点步骤详解,PHP找出链表中环入口节点的注意事项有哪些,下面就是实战案例,一起来看一下. 问题 一个链表中包含环,请找出该链表的环的入口结点. 解决思路 第一步, ...

  4. C++Primer第五版——习题答案+详解(完整版)

     C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...

  5. C++Primer第五版——习题答案详解

     C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...

  6. 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述

    算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...

  7. 《Java 2实用教程》(第5版)(清华大学出版社)作者:张跃平、耿祥义习题答案详解

    <Java 2实用教程>(第5版)(清华大学出版社)作者:张跃平.耿祥义习题答案详解 **此答案与详解是本人做作业时所写部分答案,如有错误之处请指出 ** 习题2 1.问答题 (3) 逻辑 ...

  8. 自然语言处理NLP星空智能对话机器人系列:第21章:基于Bayesian Theory的MRC文本理解基础经典模型算法详解

    自然语言处理NLP星空智能对话机器人系列: 第21章:基于Bayesian Theory的MRC文本理解基础经典模型算法详解 1,Bayesian prior在模型训练时候对Weight控制.训练速度 ...

  9. 十大经典排序算法详解

    本文转自 <卢明冬的博客> 文章目录 排序算法的分析和评价 2.十大排序经典算法总览 2.1 排序算法的分类 2.2 排序算法的性能 2.3 各阶复杂度性能对比 2.4 排序算法的初始状态 ...

  10. 用c语言编辑平抛运动,平抛运动习题及详解

    原标题:平抛运动习题及详解 平抛运动可以看成是水平方向做匀速运动,竖直方向做自由落体运动的这两种运动的合运动. 解决问题的方法是:根据题意,正确地作出示意图,识别出运动性质后,将平抛运动分解成直线运动 ...

最新文章

  1. 六、MySql索引分类
  2. Linux系统监控之磁盘I/O篇
  3. RESTful Web 服务 - 资源
  4. 关于 JS 模块化的最佳实践总结
  5. SQL语言:嵌入式SQL知识笔记
  6. Quartz.net定时任务的使用及获取正在运行的JOB
  7. JMeter【第五篇】关联:5种方法
  8. 【实习项目记录】(四)Android 实现手机验证时,按钮倒计时60s
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的快递代拿系统
  10. TOCControl 的HitTest()方法
  11. 基于SSM实现学生竞赛管理系统
  12. 倍福BECKHOFF PLC:学习资源汇总
  13. Power BI DAX: FILTER函数使用多个条件筛选数据
  14. 计算机类单位换算,计算机单位换算大全
  15. python贪吃蛇报告_python实现贪吃蛇游戏
  16. 钢琴五线谱 学习分享(兴趣爱好)
  17. 尝试搭建OPhone-sdk 手机模拟器的搭建
  18. 【PostgreSQL】PostgreSQL的upsert功能(insert on conflict do)的用法
  19. 中兴通讯:远端射频模块(RRU)关键技术创新及发展趋势
  20. 关于EEG以及如何解释EEG?

热门文章

  1. Orin 10G PHY网络分析
  2. 把DSP TMS320F28XXX的程序段从flash复制到ram中运行
  3. VSCode 提示 undefined reference to “XXX”
  4. 小厨餐饮加盟有什么优势
  5. 一键批量修改PPT所有页面的字体样式、大小和颜色的方法
  6. LayerDropout方法
  7. 广州python达内培训地址
  8. SOP系统是什么?SOP系统有哪些?如何编写SOP系统?
  9. 陪父母软件 android,同在家长版app
  10. 智能驾驶激光雷达目标模拟和场景仿真解决方案