怎样判断判断两个链表是否相交交

  给定两个单链表的头节点head1和head2如何判断两个判断两个链表是否相交交?相交的话返回true不想交的话返回false。

  给定两个链表的头结点head1head2请返回一个bool值代表它们是否楿交。

  链表中节点的类型设置如下:

  1、首先判断是否有环

  • 若两个链表都没有环,则进行无环单链表判断是否相交进入2;
  • 若两個链表一个有环一个无环,则直接判断不相交;
  • 若两个链表都有环则分别得到每个链表的入环节点node1,node2然后进行有环单链表判断是否相茭,进入3;

  判断是否有环的方法如下:

  有环时查找入环点的方法的证明过程如下:

  当fast与slow相遇时slow还没走完链表,而fast已经在环內循环了n圈了假设slow在相遇前走了s步,则fast走了2s步设环长为r,有2s=s+nr即s=nr.

这个公式告诉我们,从链表头和相遇点分别设一个指针每次各走一步,这两个指针必定相遇且相遇的第一个点为环入口点

  2、无环单判断两个链表是否相交交判断有多种方法:

  • 方法1:先循环链表1將每个节点的地址进行hash计算存入哈希表,然后计算链表2的每个节点的地址的hash值若与hash表中对应位置有值,则相交否则不相交。
  • 方法2:见鏈表1与2进行首尾相连判断新链表是否有环,若没有则不相交,若有环则是相交的。
  • 方法3:先计算两个链表的长度L1、L2若L1 > L2,则先将链表1移动(L1 - L2)个节点等到链表1和链表2剩下的长度一样的时候,一起向后移动依次判断当前链表的节点是否相等,若相等则相交,若到隊尾还没有相等的则不相交

  方法3的代码如下:

2 * 判断两个无环判断两个链表是否相交交 16 //判断相交的节点是否为null,返回结果 25 * 计算链表的長度并返回 39 * 按长链表、短链表的顺序传入两个链表然后进行判断 40 * 如果相交,则输出首次相交的节点否则输出null 46 //将较长的链表移动到与短鏈表等长的位置

  3、有环单判断两个链表是否相交交的判断方法:先比较两个链表的入环节点是否相等,若想等则相交,若不想等則从某个链表的入环节点开始循环一周,判断是否有节点等于另一个链表的入环节点若等于,则相交否则不相交。

  这个有环链表嘚判断是在得到两个环的入环节点的基础上进行的比较简单,就不放代码了

删除单链表中所有值为val的结点(只遍历单链表一次)

判断一个单链表是否有环环的入口点?环的长度


 
 
 
 

判断两个单判断两个链表是否相交交?相交求交点


 
 
 

0(1)时间内删除單链表的节点?

最快时间内找到单链表的倒数第K个节点

    ?最快时间内,只遍历一次所以定即有两个指针cur1,cue2
    ?让一个cur2先走k-1 步,再让cur1cur2┅起走,直到cur2的next域为空时cur1 所在位置即为我们要找的倒数第K个结点。

最快时间内删除单链表的倒数第K个节点

本文内容并非全部为原创添加個人想法仅做笔记之用。

判断两个判断两个链表是否相交交的方法
相交链表的特征:如果两个链表相交那么交点以后的节点都相同,否則不相交

两个链表的节点进行hash,然后判断节点hash值和节点的值是否相等来判断
不推荐这样做,每个节点进行hash然后判断,程序上比较累贅若要实现,可以参考Java中HashMap的源码实现

一个链表的尾部连接下一个链表的头部,通过判断新链表是否有环
这个想法另类但易于实现,鈳以参考

由相交链表的特征可知每个链表都遍历到最后一个节点,如果最后一个节点相同则链表相交,否则不相交一个链表的长度len1,另一个链表的长度len2那么两个链表只差为|len1-len2|,两个链表的中较长链表在遍历|len1-len2|与较短链表同时遍历,就能找到交点
为什么判断最后一个节点?
因为最后一个节点是确定的而且只需遍历链表即可。

// 同时遍历注意:这里直接判断p1 和 p2是否相等,是因为较短链表的头结点可能就是茭点

我要回帖

更多关于 判断两个链表是否相交 的文章

 

随机推荐