题目
请实现一个函数,如果两个链表相交,请返回相交的第一个节点,如果不相交,返回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;
}