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

【 声明:版权所有,欢迎转载。 联系信箱:[email protected]

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

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

两种方法:

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

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

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

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

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

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

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


你可能感兴趣的:(面试题)