关于链表的一些问题

来源:互联网 发布:arcgis 地图数据制作 编辑:程序博客网 时间:2024/06/15 16:38
1.判断一个任意长度的链表是否存在环?
答:很多人也许会设置一个指针指向第一个节点,但是这种方法是错误的,因为链表可能是从中间某个节点开始才有环的,开始的节点并不一定会在环里面。让我们想象一下如果一个链表存在环的话,那么这个链表一定是“6”型或“0”型的,也就是开始可能存在某些节点不存在环之中,这就增加了这个的复杂性,那么很多人会想到设置一个浮标,然后遍历一遍链表这样做是可以的但是时间复杂度为O(n^2),对时间要求很高了,而且还要兼顾链表是否存在循环这个问题。
下面就来说一种更加简便的算法:设置两个指针p1和p2,p1每次走一步,p2每次走2步,如果到达终点而没有相遇就表明没有循环。如果存在循环那么迟早他们会相遇的时间复杂度初步估算是O(n),所以效率大大提高了。
2.判断两个链表是否相交?
答:对于这个问题很多人可能会想到遍历的这种方法,这也是一种办法,但是不是最好的办法。
最好的办法是:首先设想一下两个链表如果相交,那么它们是什么样的?只要把这个问题想通了一切就OK了。如果两个链表相交的话,那么他们相交一定是“Y”型的,因为对于相交节点,每个节点的数据都是一样的不可能存在分支,也就是不可能是“X”型的。所以对这两个链表就这需要分别计算长度,然后让长的那个一直向前走,直到一样长,然后在判断是否一样,如果不同则一起向前走直到遇到相同的节点为相交或者都到结尾而没有相遇,此为不相交。
原创粉丝点击