博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表及简单应用
阅读量:6292 次
发布时间:2019-06-22

本文共 756 字,大约阅读时间需要 2 分钟。

单链表

基本结构
struct node{    ElemType data;    node *next;};
快慢指针及其应用
(1) 判断链表中是否有圈(亦称floyed判圈法)
  • ACM例题: Uva 11549

    原理:两个人跑步,A的速度大于B,如果跑道没有环,那么A永远是领先于B,如果有环,那么A必然会追上B.

(2)寻找循环链表的入口

设环周期为r,相遇点为x,起点到入口长度为a,计算可得

A: a+xB: a+n*r+x因为:   Vb=2Va所以:      2(a+x)=a+n*r+x-->   a+x=n*r-->   a=n*r-x此时A回到远点重跑到入口处,Sa=aB从相遇点开始跑,Sb=x+a=n*r;n*r是环长的倍数,正好与A在入口处相遇
node *s1=head;node *s2=head;while(s1!=s2){   s1=s1->next;   if(s2->next==null) break;   s2=s2->next->next;}if(s2->next==null) return null;s1=head;while(s1!=s2){    s1=s1->next;    s2=s2->next;}return s2;
(3)寻找倒数第k个节点

两个指针保持同一速度,A指针走到k时B指针才走,那么当A指针走完整个指针时,B指针正好走到第倒数第k个节点

(4)判断两个链表相交

由于单链表的特殊性质,可知:若链表于某处相交,后面的节点都会保持一致,所以我们只需判断尾节点是否一致就可以(若两个链表都存在环,只要尾节点是环中一处即可)。

转载于:https://www.cnblogs.com/zsyacm666666/p/6898208.html

你可能感兴趣的文章
springboot+logback日志异步数据库
查看>>
Typescript教程之函数
查看>>
Android 高效安全加载图片
查看>>
vue中数组变动不被监测问题
查看>>
3.31
查看>>
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>