題目描述
輸入兩個鏈表,找出它們的第一個公共結點。(注意因爲傳入數據是鏈表,所以錯誤測試數據的提示是用其他方式顯示的,保證傳入數據是正確的)
分析
先遍歷一次兩個鏈表,找到較長的,讓該鏈表指針先走delta步,較短鏈表從頭開始走,最終兩指針必然會在第一個公共結點相遇。
代碼
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
int len1=getLength(pHead1), len2=getLength(pHead2);
if(len1==0 || len2==0) return null;
ListNode work1=pHead1, work2=pHead2;
if(len1>len2){
int delta = len1-len2;
for(int i=0;i<delta;i++) work1=work1.next;
while(work1!=work2){
work1=work1.next;
work2=work2.next;
}
return work1;
}else{
int delta = len2-len1;
for(int i=0;i<delta;i++) work2=work2.next;
while(work1!=work2){
work1=work1.next;
work2=work2.next;
}
return work1;
}
}
public int getLength(ListNode node){
if(node==null) return 0;
ListNode tmp = node;
int count=0;
while(tmp!=null){
count++;
tmp=tmp.next;
}
return count;
}
}