question:给定两个可能有环也可能无环的单链表,头节点head1和head2,实现一个函数,如果两个链表相交,请返回相交的第一个节点。如果不相交返回null,要求如果两个链表长度之和为N,时间复杂度请达到O(N),额外空间复杂度请达到O(1)
代码及其解释如下所示:
public class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val = val;
}
}
//找寻两个链表第一次相交的结点
/*
两个链表会有三种情况(有图)
情况一:两个链表都有环
情况二:两个链表都没有环
情况三:一个链表有环,另一个没有
此时两个链表不可能相交,因为如果有相交结点,两个链表会共享一个环,所以直接返回空
*/
//参数:两个链表的头结点
public ListNode findFirstIntersectNode(ListNode head1,ListNode head2){
if(head1 == null || head2 == null){
return null;
}
//因为不知道链表是否有环 所以先判断链表是否有环 若有环 返回入环结点 否则返回空
ListNode inCycleNode1 =