方法一:暴力,遍历A链表每一个节点的过程中,对B链表进行检查 O(AB)
方法二:因为题目中链表是单向的,所以在第一个重合点后,其他都相等,就是Y型的。所以他们尾节点是相同的,因此就重后面开始,符合“先进后出的特点”,我们可以定义两个栈,然后链表进栈,在进行出栈比较;
方法三:先获取两个链表的长度,如果长的长度比短的长m,则长先走m步后再一起走,开始比较
ListNode findfrist( ListNode A,ListNode B){ //获取链表长度 int Alength=1,Blength=1; ListNode A1=A; while(A1.next!=null){ A1=A1.next; Alength++; } ListNode B1=B; while(B1.next!=null){ B1=B1.next; Blength++; } //长的先走k步 int k=B.length-A.length; while(k<0){ k++; A=A.next; } while(K>0){ k--; B=B.next; } //同等长度·下开始比较直到找到交点直接返回 while(Alength>0 ){ if(A==B)return A; A=A.next; B=B.next; A.length--; } //没有交点到最后就是null return null; }
注意:如果将尾节点看成根节点,那么就像是两棵树寻找共同祖先
原文:https://www.cnblogs.com/niliuxiaocheng/p/12593300.html