“chaos”的算法--之链表面试题

简介:

【 声明:版权所有,欢迎转载。 联系信箱:yiluohuanghun@gmail.com】

  前两天倩仔仔给我了一套试题让我看,整体来说感觉题都还算不错,从中随便找了两道。先看题吧!

1、怎样判断一个单链表中是都存在环路?(搜狗面试题)

两种方法:

方法一:使用p、q两个指针,p总是向前走,但q每次都从头开始走,对于每个节点,看p走的步数是否和q一样。如图,当p从6走到3时,用了6步,此时若q从head出发,则只需两步就到3,因而步数不等,出现矛盾,存在环。

方法二:使用p、q两个指针,p每次向前走一步,q每次向前走两步,若在某个时候p == q,则存在环。

2、怎样快速找到未知长度单链表的中间节点?(腾讯面试题)

方法一、先对其进行遍历,求出长度n,则中间元素就可求出。

方法二、运用快慢指针方法,一个指针每走一步另一个指针走两步,当后者走到头时,前者所指结点即为中间元素。

   当然了,方法一应该是大多数人都能想到的,但是这样的公司我相信他要的肯定不是方法一了。

   综上所述,快慢指针还是很有用的。





     本文转自 驿落黄昏 51CTO博客,原文链接:http://blog.51cto.com/yiluohuanghun/1266231,如需转载请自行联系原作者

相关文章
|
1月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
29天前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
|
1月前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
11 0
|
1月前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
10 0
|
1月前
|
算法
【数据结构与算法】循环链表
【数据结构与算法】循环链表
11 0
|
1月前
|
存储 算法
【数据结构与算法】链表
【数据结构与算法】链表
16 0
|
1月前
|
算法
【C算法】链表算法
【C算法】链表算法
|
1月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
43 0
|
1月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
17 0
|
2月前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
40 1