链表算法
来源:互联网 发布:知乎 竖肩章 编辑:程序博客网 时间:2024/06/18 05:18
1、给定单链表,检测是否有环。
2、如果单链表有环,找到环节点。
第一步,先按照上一题让p1和p2相遇,则相遇的点必然在环里。
假设链表起点到环节点距离为l,环节点到p1,p2相遇点的距离为a,
则p1前进距离为:l+a
p2前进距离为:2(l+a)
2(l+a)-(l+a)= nc // p2比p1多跑的距离为n圈c为环的周长
则 l+a = nc
第二步,p1再从链表开始跑,p2从相遇点开始跑,当跑了l距离以后。
p1所在位置则是环节点。
p2所在位置是2(l+a)+l = 2nc + l,p2必然也在环节点了,
所以当p1,p2 再次相遇,就是环节点的位置。
3、 给定两个单链表(head1, head2),检测两个链表是否有交点,如果有返回第一个交点。
4、给定单链表头结点,删除链表中倒数第k个结点。
5、找出链表的中间元素
单链表的一个比较大的特点用一句广告语来说就是“不走回头路”,不能实现随机存取(random access)。如果我们想要找一个数组a的中间元素,直接a[len/2]就可以了,但是链表不行,因为只有a[len/2 - 1] 知道a[len/2]在哪儿,其他人不知道。因此,如果按照数组的做法依样画葫芦,要找到链表的中点,我们需要做两步(1)知道链表有多长(2)从头结点开始顺序遍历到链表长度的一半的位置。这就需要1.5n(n为链表的长度)的时间复杂度了。有没有更好的办法呢?有的。想法很简单:两个人赛跑,如果A的速度是B的两倍的话,当A到终点的时候,B应该刚到中点。这只需要遍历一遍链表就行了,还不用计算链表的长度
- 链表插入算法
- 链表算法
- 链表反序算法
- 链表倒序算法
- 链表逆序算法
- 链表复制算法
- 链表算法大全
- 链表合并算法
- 链表算法
- 链表合并算法
- 常见链表算法
- 链表常用算法
- 单向链表算法
- 算法中的链表
- 链表倒序算法
- 链表算法汇总
- 链表基本算法
- 链表操作算法
- 合并两个链表成一个升序链表
- 2016年观影总结
- IDEA中上传本地项目到Git
- request中的各种path
- XML解析方式
- 链表算法
- Jquery-zTree的基本用法(不错)
- web前端html文件之间做表单数据传输和处理
- stl中map的使用总结
- leetcode-69. Sqrt(x)
- 第十五周项目八判断回文
- CS231n课程笔记2.2:线性分类器
- 打印菱形星号组合(俩种解法),不允许只用printf,要求采用循环的方式,找规律。
- ubuntu下配置深度播放器