力扣160题
问题解决思路:计算出两个链表的长度差n,然后让长链表走n步,然后两个链表共同走,当两个链表相同的时候,返回链表
public ListNode noloop(ListNode head1, ListNode head2) {
if (head1 == null || head2 == null) {
return null;
}
int n = 0;//长度差
ListNode cur1 = head1;
ListNode cur2 = head2;
while (cur1 != null) {
n++;
cur1 = cur1.next;
}
while (cur2 != null) {
n--;
cur2 = cur2.next;
}
if (cur1 != cur2) {//如果两个链表都走完了,end节点不相等的时候,那么两个链表不相交
return null;
}
cur1 = n > 0 ? head1 : head2;
cur2 = cur1 == head1 ? head2 : head1;
n = Math.abs(n);//n的绝对值
while (n != 0) {
n--;
cur1 = cur1.next;
}
while (cur1 != cur2) {//走到两个链相等为止
cur1 = cur1.next;
cur2 = cur2.next;
}
return cur1;
}