题目描述
输入两个链表,找出它们的第一个公共结点。
思路:
分别统计两个链表的长度,求出差值。设置两个指针,分别指向两个链表的头结点,然后长链表的指针,先移动差值的距离,之后两个指针同步向前移动,找第一个相等的节点。
/*
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;
}
}