题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
分析
先遍历一次两个链表,找到较长的,让该链表指针先走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;
}
}