题目描述
输入两个链表,找出它们的第一个公共结点。
思路:如果存在公共结点,那么公共结点后的结点也相同。因此长链表先走len步,然后两链表在一起走。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null || pHead2==null)
return null;
ListNode p1 = pHead1;
ListNode p2 = pHead2;
int len1 = 0,len2 = 0;
while(p1!=null){
len1++;
p1 = p1.next;
}
while(p2!=null){
len2++;
p2 = p2.next;
}
p1 = len1>len2?pHead1:pHead2;
p2 = p1==pHead1?pHead2:pHead1;
int len = len1>len2?len1-len2:len2-len1;
while(len>0){
p1 = p1.next;
len--;
}
while(p1!=null){
if(p1==p2)
return p1;
p1 = p1.next;
p2 = p2.next;
}
return null;
}
}