单链表中的环面试题目

对于链表中的环,常见面试题目有下面几个:

1.给一个单链表,判断其中是否有环的存在?

思路:采用快慢指针,快指针每次走2,慢指针每次走1,如果在快指针遍历链表结束之前,二者相遇,则说明有环。

2.如果存在环,找出环的入口点?

思路:从链表起点到环的入口点,与从快慢指针相遇点到环的入口点,距离相同。

3.如果存在环,求出环上节点的个数?

思路:1,采用已经进入环中慢指针遍历环,当再次到达遍历起点时所经过的距离就是环的长度 2,采用快慢指针,从快慢指针第一次相遇之后开始遍历,直到它们再次相遇,那么从第一次相遇到再次相遇,所经历的距离就是环的长度,即环上节点的个数。

4.如果存在环,求出链表的长度?

思路:起点到入口点的长度,加上环的长度,就是链表的长度。

5.如果存在环,求出环上距离任意一个节点最远的点(对面节点)?

思路:建立快慢指针,从该点开始遍历环,当快指针再次回到起点时,慢指针所指向的节点就是对面节点。

6.如何判断两个无环链表是否相交?

思路:先算出两个链表的长度差,然后对长链表在长度差的位置处开始遍历,短链表从头开始遍历,如果在遍历结束前两者相遇,则相交。

7.如果相交,求出第一个相交的节点?

思路:借鉴上面的6。

猜你喜欢

转载自blog.csdn.net/jigetage/article/details/88693890