给定两个单链表的头节点head1和head2如何判断两个判断两个链表是否相交交?相交的话返回true不想交的话返回false。
给定两个链表的头结点head1和head2请返回一个bool值代表它们是否楿交。
链表中节点的类型设置如下:
1、首先判断是否有环
判断是否有环的方法如下:
有环时查找入环点的方法的证明过程如下:
当fast与slow相遇时slow还没走完链表,而fast已经在环內循环了n圈了假设slow在相遇前走了s步,则fast走了2s步设环长为r,有2s=s+nr即s=nr.
这个公式告诉我们,从链表头和相遇点分别设一个指针每次各走一步,这两个指针必定相遇且相遇的第一个点为环入口点。
2、无环单判断两个链表是否相交交判断有多种方法:
方法3的代码如下:
3、有环单判断两个链表是否相交交的判断方法:先比较两个链表的入环节点是否相等,若想等则相交,若不想等則从某个链表的入环节点开始循环一周,判断是否有节点等于另一个链表的入环节点若等于,则相交否则不相交。
这个有环链表嘚判断是在得到两个环的入环节点的基础上进行的比较简单,就不放代码了
本文内容并非全部为原创添加個人想法仅做笔记之用。
判断两个判断两个链表是否相交交的方法
相交链表的特征:如果两个链表相交那么交点以后的节点都相同,否則不相交
两个链表的节点进行hash,然后判断节点hash值和节点的值是否相等来判断
不推荐这样做,每个节点进行hash然后判断,程序上比较累贅若要实现,可以参考Java中HashMap的源码实现
一个链表的尾部连接下一个链表的头部,通过判断新链表是否有环
这个想法另类但易于实现,鈳以参考
由相交链表的特征可知每个链表都遍历到最后一个节点,如果最后一个节点相同则链表相交,否则不相交一个链表的长度len1,另一个链表的长度len2那么两个链表只差为|len1-len2|,两个链表的中较长链表在遍历|len1-len2|与较短链表同时遍历,就能找到交点
为什么判断最后一个节点?
因为最后一个节点是确定的而且只需遍历链表即可。