题目
判断两个无环链表是否相交,相交则返回第一个相交节点,否则返回null
思路
- 分别遍历链表1和链表2,最后一个节点分别即为end1和end2,长度分别记为len1和len2
- 如果end1不等于end2,则不相交,否则相交
- 比较len1和len2,哪一个链表长就先走|len1-len2|步,然后同步走,第一次会和的节点就是需要返回的节点
源码
public class Node{
public int value;
public Node next;
public Node(int data){
this.value=data;
}
}
public Node noLoop(Node head1,Node head2){
if(head1==null||head2==null){
return null;
}
Node cur1=head1;
Node cur2=head2;
int n=0;
while(cur1.next!=null){
n++;
cu1=cur1.next;
}
while(cur2.next!=null){
n--;
cu2=cur2.next;
}
if(cur1!=cur2){
return null;
}
cur1=n>0?head1:head2;
cur2=cur1==head1?head2:head1;
n=Math.abs(n);
while(n!=0){
n--;
cur1=cur1.next;
}
while(cur1!=cur2){
cur1=cur1.next;
cur2=cur2.next;
}
return cur1;
}