扫码关注公众号

测试算法考点之链表
05-16
538观看
01

一个长度为n的单向链表,用O(1) 空间复杂度来实现倒转输出,使用最低时间复杂度

思路:读题(反射)单向链表,直接设结点Nodehead;要倒转就需要重置链接,设记忆结点Nodep空间复杂度为O(1),就是不能使用新的空间

来自:链表算法-链表算法
02

如果单链表中是有环,请找到环的入口点

思路这是【单链表中是否有环,写出代码】的扩展题,可以划分到面试中难度最大的那一档中没有思路,只能静下心来 找环的入口点,就是找到入

来自:链表算法-链表算法
03

如何判断两个单链表是否相交 ?

法1对链表1中的每个节点p1,判断链表2中是否有一个节点p2指向p1loop:p1从head1到最后一个节点loop:p2从head2到最后一个节点if(p2是否指向p1)相交break时间复杂度:O(list1.length*list2.length)空间复杂度:O(1)法2使用hash表loop:p1从head1到最后一个节点把p1放入hash表table中loop:p2从head2到最后一个节点if(p2在hash表中)相交时间复杂度:O(list1.length+list2.length)空间复杂度:O(list1.length)法3将其中一个链表首尾相连,检测另一个链表是否存在环,如果存在,则两个链表相交,而检测出来的依赖环入口点即为相交的第一个点。程序描述如下:找到list1的最后一个节点tail1tail1->next=head1法4如果两个链表相交,那么两个链表从相交点到链表结束都是相同的节点。可以先分别遍历找出两个链表的尾节点,如果连个尾节点相同,则两个链表相交。程序描述如下://找到list1的最后一个节点p1p1=head1while(p1->next不是NULL)p1=p1->next找出list2的最后一个节点p2if(p1==p2)相交else不相交时间复杂度:O(list1.length+list2.length)空间复杂度:O(1)

来自:链表算法-链表算法
课程
专栏
2专栏
1课程
3 试题