目的:如果两个单链表相交,输出他们相交的节点。
实现思路:有两个链表,长链表和短链表,让长链表先走差值步,然后长链表和短链表一起遍历,直到找到相交的节点(两个节点,返回哪个都可以)
public Node<T> MeetLink(SingleLink<T> link){
//1.让长链表先走差值步,然后长链表和短链表一起遍历,直到p=q return p
int curSize=size;
int LinkSize=link.size;
int diff=curSize-LinkSize;
Node<T> longLinkP=diff>0?head:link.head;//遍历长链表
Node<T> shortLinkP=diff>0?link.head:head;//遍历短链表
//长链表遍历差值步
diff=Math.abs(diff);
while (diff>0){
longLinkP=longLinkP.next;
diff--;
}
while (longLinkP!=shortLinkP){
longLinkP=longLinkP.next;
shortLinkP=shortLinkP.next;
}
return longLinkP;
}
时间复杂度为O(m+n)