链表的经典习题(画图详解)
文章目录
- 前言
- 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;
}
接下来我们来证明这个结论
链表的经典习题(画图详解)相关推荐
- 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序
养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...
- python创建双链表_Python双链表原理与实现方法详解
本文实例讲述了Python双链表原理与实现方法.分享给大家供大家参考,具体如下: Python实现双链表 文章目录 Python实现双链表 单链表与双链表比较 双链表的实现 定义链表节点 初始化双链表 ...
- php单链表检测有没有环,PHP找出链表中环入口节点步骤详解
这次给大家带来PHP找出链表中环入口节点步骤详解,PHP找出链表中环入口节点的注意事项有哪些,下面就是实战案例,一起来看一下. 问题 一个链表中包含环,请找出该链表的环的入口结点. 解决思路 第一步, ...
- C++Primer第五版——习题答案+详解(完整版)
C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...
- C++Primer第五版——习题答案详解
C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...
- 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述
算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...
- 《Java 2实用教程》(第5版)(清华大学出版社)作者:张跃平、耿祥义习题答案详解
<Java 2实用教程>(第5版)(清华大学出版社)作者:张跃平.耿祥义习题答案详解 **此答案与详解是本人做作业时所写部分答案,如有错误之处请指出 ** 习题2 1.问答题 (3) 逻辑 ...
- 自然语言处理NLP星空智能对话机器人系列:第21章:基于Bayesian Theory的MRC文本理解基础经典模型算法详解
自然语言处理NLP星空智能对话机器人系列: 第21章:基于Bayesian Theory的MRC文本理解基础经典模型算法详解 1,Bayesian prior在模型训练时候对Weight控制.训练速度 ...
- 十大经典排序算法详解
本文转自 <卢明冬的博客> 文章目录 排序算法的分析和评价 2.十大排序经典算法总览 2.1 排序算法的分类 2.2 排序算法的性能 2.3 各阶复杂度性能对比 2.4 排序算法的初始状态 ...
- 用c语言编辑平抛运动,平抛运动习题及详解
原标题:平抛运动习题及详解 平抛运动可以看成是水平方向做匀速运动,竖直方向做自由落体运动的这两种运动的合运动. 解决问题的方法是:根据题意,正确地作出示意图,识别出运动性质后,将平抛运动分解成直线运动 ...
最新文章
- 六、MySql索引分类
- Linux系统监控之磁盘I/O篇
- RESTful Web 服务 - 资源
- 关于 JS 模块化的最佳实践总结
- SQL语言:嵌入式SQL知识笔记
- Quartz.net定时任务的使用及获取正在运行的JOB
- JMeter【第五篇】关联:5种方法
- 【实习项目记录】(四)Android 实现手机验证时,按钮倒计时60s
- 基于JAVA+SpringMVC+Mybatis+MYSQL的快递代拿系统
- TOCControl 的HitTest()方法
- 基于SSM实现学生竞赛管理系统
- 倍福BECKHOFF PLC:学习资源汇总
- Power BI DAX: FILTER函数使用多个条件筛选数据
- 计算机类单位换算,计算机单位换算大全
- python贪吃蛇报告_python实现贪吃蛇游戏
- 钢琴五线谱 学习分享(兴趣爱好)
- 尝试搭建OPhone-sdk 手机模拟器的搭建
- 【PostgreSQL】PostgreSQL的upsert功能(insert on conflict do)的用法
- 中兴通讯:远端射频模块(RRU)关键技术创新及发展趋势
- 关于EEG以及如何解释EEG?