题目描述
输入两个链表,找出它们的第一个公共结点。
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
//先求出链表长度,然后长的链表先走多出的几步,
//然后两个链表同时向下走去寻找相同的节点,
//代码量少的方法需要将两个链表遍历两次,然后从头开始相同的节点。
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode list1=pHead1;
ListNode list2=pHead2;
Map<ListNode,Integer> map = new HashMap<ListNode,Integer>(); //泛型K为ListNode,V可以是任何类型因为与V无关
while(list1!=null){//先将list1输入哈希表。
map.put(list1,null);//构造哈希表将V定为null。
list1=list1.next;
}
while (list2!=null){
if(map.containsKey(list2)){//containsKey方法用来判断Map集合对象中是否包含指定的键名。
return list2;//如果有返回参数中的对象既是公共几点
}
list2=list2.next;//如果没有判断下个结点
}
return null;
}
}