www.6818.com www.1076.com www.6118.com www.5816.com
当前位置: 三肖公式 > 三肖公式 >

单链表面试题,看完这篇就够了

来源:本站原创    发布时间:2018-03-16


1、找出单链表的倒数第K个元素(仅允许遍历一遍链表)

使用指针追赶的方法。定义两个指针fast和slow,fast先走K步,然后fast和slow同时继续走。当fast到链表尾部时,slow指向倒数第K个。注意要考虑链表长度应该大于K。

2、找出单链表的中间元素(仅允许遍历一遍链表)

使用指针追赶的方法。fast每次走一步,slow每次走两步。当fast到链表尾部时,slow指向链表的中间元素。

3、判断单链表是否有环?

方法一:使用指针追赶的方法。slow指针每次走一步,fast指针每次走两步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。

方法二:使用p、q两个指针,p总是向前走,但q每次都从头开始走。

4、如何知道环的长度?

记录下碰撞点(或者找在环中任意一结点都可以),让slow从碰撞点开始,绕着环走一圈,再次到碰撞点的位置时,所走过的结点数就是环的长度s。

5、如何找到环的入口?

分别从碰撞点、头指针开始走,相遇的那个点就是连接点。

6、判断两个链表(无环)是否相交?

方法一:采用暴力的方法,遍历两个链表,在遍历的过程中进行比较,看节点是否相同。

方法二:两链表一旦相交,相交节点一定有相同的内存地址,因此利用内存地址建立哈希表,如此通过判断两个链表中是否存在内存地址相同的节点判断两个链表是否相交。具体做法是:遍历第一个链表,并利用地址建立哈希表,遍历第二个链表,看看地址哈希值是否和第一个表中的节点地址值有相同即可判断两个链表是否相交。时间复杂度O((length(A)+ length(B))

方法三:问题转化法。先遍历第一个链表到其尾部,然后将尾部的原本指向NULL的next指针指向第二个链表。这样两个链表就合成了一个链表,问题转变为判断新的链表是否有环?

标签 链表 遍历 单链表 方法 指针



友情链接: WWW.850.COM WWW.840.COM WWW.3088.COM WWW.6566.COM 188BET
Copyright 2017-2022 三肖公式 版权所有,未经协议授权禁止转载。