題目
判斷兩個無環鏈表是否相交,相交則返回第一個相交節點,否則返回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;
}