題目
請實現一個函數,如果兩個鏈表相交,請返回相交的第一個節點,如果不相交,返回null即可。鏈表可能有環或無環。
要求
如果鏈表1的長度爲N,鏈表2的長度爲M,時間複雜度達到O(M+N),額外空間複雜度請達到O(1).
思路
綜合前三篇文章,即可。
- 判斷是否有環,有則返回入環節點,否則返回null
- 判斷兩個無環鏈表是否相交,有則返回第一個交點,否則返回null
- 判斷兩個有環鏈表是否相交,有則返回第一個交點,否則返回null
源碼
public class Node{
public int value;
public Node next;
public Node(int data){
this.value=data;
}
}
public Node getIntersectNode(Node head1,Node head2){
if(head1==null||head2==null){
return null;
}
Node loop1=getLoopNode(head1);
Node loop2=getLoopNode(head2);
if(loop1==null&&loop2==null){
return noLoop(head1,head2);
}
if(loop1!=null&&loop2!=null){
return bothLoop(head1,loop1,head2,loop2);
}
return null;
}