1、题目描述
输入两个链表,找出它们的第一个公共结点。
2、思路
(1)分别计算两个链表的长度。并计算出两个链表的长度差gap。
(2)使节点较多的链表先走gap步。
(3)使两个链表一起走,碰到的第一个相同的节点,便是它们的第一个公共节点。
3、代码实现
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2){
int length1 = 0;
int length2 = 0;
ListNode node1 = pHead1;
ListNode node2 = pHead2;
while(node1!=null){
length1++;
node1 = node1.next;
}
while(node2!=null){
length2++;
node2 = node2.next;
}
if(length1>length2){
int gap = length1 - length2;
for(int i=0;i<gap;i++){
pHead1 = pHead1.next;
}
}else{
int gap = length2- length1;
for(int i=0;i<gap;i++){
pHead2= pHead2.next;
}
}
while(pHead1!=null && pHead2!=null){
if(pHead1 == pHead2){
return pHead1;
}
pHead1 = pHead1.next;
pHead2 = pHead2.next;
}
return null;
}
}