如何查找链表的交集节点?
A1-->A2-->A3-->A4-->A5-->A6-->A7
^
|
B1-->B2-->B3
我们必须找到交叉点的节点
答案 0 :(得分:2)
解决方案1:
对于列表中的每个节点,检查下一个节点是否与另一个列表中的节点相同。
if(A->next == B->next)
{
//nodes of interaction
}
这具有m * n
的复杂性解决方案2(高效):
答案 1 :(得分:1)
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int length1=0;
int length2=0;
ListNode head1 = headA;
ListNode head2 = headB;
while(headA!=null){
length1++;
headA = headA.next;
}
while(headB!=null){
length2++;
headB = headB.next;
}
int minus = length1-length2;
int abs = Math.abs(minus);
if(minus<0){
int step=abs;
while(step>0){
head2 = head2.next;
step--;
}
}else{
int step=abs;
while(step>0){
head1 = head1.next;
step--;
}
}
if(head1==head2)
return head1;
while(head1!=null&&head2!=null&&head1!=head2)
{
head1=head1.next;
head2=head2.next;
}
return head1;
}
}