输入两个链表,找出它们的第一个公共结点。
对于长度相同的,第一遍即出结果,他们要么一起走到共同结点,要么一起到终点null 对于长度不同的,第二遍出结果,第一遍走不到一起,必须相互交换头才会走到一起 比如上图的树p1,p2的遍历顺序必然为: P1 : 2 4 6 7 1 3 5 6 7 P2: 1 3 5 6 7 2 4 6 7 显然,第二遍时候都会同时走到6
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode p1=pHead1;
ListNode p2=pHead2;
while(p1!=p2){
p1= p1==null?pHead2:p1.next;
p2= p2==null?pHead1:p2.next;
}
return p1;
}
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if (pHead1==null||pHead2==null){
return null;
}
ListNode node1=pHead1;
Set<ListNode> set=new HashSet<>();
while (node1!=null){
set.add(node1);
node1=node1.next;
}
ListNode node2=pHead2;
while (node2!=null){
if (set.contains(node2)){
return node2;
}
node2=node2.next;
}
return null;
}