題目描述
輸入兩個鏈表,找出它們的第一個公共結點。
思路:
分別統(tǒng)計兩個鏈表的長度,求出差值。設置兩個指針,分別指向兩個鏈表的頭結點,然后長鏈表的指針,先移動差值的距離,之后兩個指針同步向前移動,找第一個相等的節(jié)點。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
//計算鏈表1的長度
ListNode p1 = pHead1;
int size1 = 0;
while(p1!=null){
size1++;
p1=p1.next;
}
ListNode p2=pHead2;
int size2 = 0;
//計算鏈表2的長度
while(p2!=null){
size2++;
p2=p2.next;
}
p1=pHead1;
p2=pHead2;
int offset = 0;
if(size1>size2){
offset = size1-size2;
while(offset>0){
p1=p1.next;
offset--;
}
}else if(size2>size1){
offset = size2-size1;
while(offset>0){
p2=p2.next;
offset--;
}
}
ListNode p = null;
while(p1!=null&&p2!=null){
if(p1==p2){
p=p1;
break;
}
p1=p1.next;
p2=p2.next;
}
return p;
}
}