一、题目描述
输入两个链表,找出它们的第一个公共结点
二、解题思路
(1)这种链表是Y型的,不是X型的
(2)先分析出两个链表长度的差,再将较长的那个链表的表头遍历完这个长度差
(3)剩下的两个链表的长度就相等了,即可同时遍历这两个链表,并判断是否相等,如果相等,就返回,就是第一个公共结点。
三、java代码
public class Solution_37 {
/**
* 输入两个链表,找出它们的第一个公共结点。
*/
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1 == null||pHead2 == null){
return null;
}
int l1 = getLength(pHead1);
int l2 = getLength(pHead2);
if(l1>l2){
for(int i =0;i<(l1-l2);i++){
pHead1 = pHead1.next;
}
}
if(l1<l2){
for(int i = 0;i<(l2-l1);i++){
pHead2 = pHead2.next;
}
}
while(pHead1!=null){
if(pHead1==pHead2){
return pHead1;
}else {
pHead1 = pHead1.next;
pHead2 = pHead2.next;
}
}
return null;
}
public static int getLength(ListNode pHead) {
int count = 0;
ListNode temp = pHead;
while (temp.next != null) {
count++;
temp = temp.next;
}
return count;
}
}
PS:也可以利用hashMap来做,利用containsKey方法。