单链表练习2

来源:互联网 发布:网络金融平台监管部门 编辑:程序博客网 时间:2024/05/16 19:13

1.判断单链表是否带环?若带环,求环的长度?求环的入口点?

    单链表不同于数组的是它的每个节点是由一个数据和一个指针构成,然后通过指针来实现连接,并不是数组通过物理内存进行连接,所以单链表的尾节点可能指向任意位置,最常见的就是指向空,也存在可能它指向单链表中的某个节点,这就构成了一个循环,我们将这种现象形象的称为这个单链表有一个环,既然有环就存在如何求环的入口点及环的长度,因为这两个数据可以形象的描述一个环。    首先,如何判断环的存在,由上面可以知道环本质上就是一个循环,如果用一个指针的话程序必定陷入死循环。所以我们用两个指针时就发现可以完成这个任务,我们定义两个指针,一个快,一个慢,慢的如果能与快的相遇就说明存在循环,就是我们所说的环。因为如果不存在的话快指针一定会比慢指针先到达结尾。    其次,判断环的入口点,比较简单的方法就是用上述的相遇点求出相遇点,然后通过一个定理,即相遇点与起点到入口点的距离相等,通过这个定理就可以求出入口点。    最后,关于环的长度的的求法,通过上述的方法求出环的入口点,然后只需要设置一计数变量就可以,通过循环快速求出环的长度。

环形链表

2.判断两个链表是否相交,若相交,求交点。(假设链表不带环)

   一般来说,听到相交第一反应就是第一幅图的样子但是这种想法是错的,因为虽然单链表是线性结构但是与直线还是有区别的,仔细想一下就会发现第一种根本无法实现,所以第二幅图才正确的,这就是单链表的相交,所以我们就会发现这个问题十分简单,我们只需要判断结尾是否相同就可以判断是否相交。

相交示意图

3.判断两个链表是否相交,若相交,求交点。(假设链表可能带环

如图
分析图 1.判断是否都带环。
2.判断交点在环内还是环外。
3. 相交用判断结尾的方法。
4. 用相遇的方法和定理求出入口点。