import java.util.HashSet;
/*
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,当两个链表中,某个节点的下一个节点与另外一个链表中的一个节点的下一个
//节点相同,那么,直接返回下一个节点,结束
//《上面这个思路时间复杂度O(n^2),是暴力解,不好》
if(pHead1 == null || pHead2==null){
return null;
}
if(pHead1== pHead2){
return pHead1;
}
//【推荐】还有一种思路是:
//建立一个set,将第一个链表的节点一个个放入set中,然后遍历第二个链表,判断set中时候包含第二个节点
//如果第二个链表的某个节点已经存在于这个set中,则直接返回即可,程序结束
//将第一个链表节点放入set中
HashSet<ListNode> set = new HashSet<>();
while(pHead1 != null){
set.add(pHead1);
if(pHead1.next ==null){
break;
}
pHead1 = pHead1.next;
}
//判断节点是否存在于set中
while(pHead2 != null){
if(set.contains(pHead2)){
return pHead2;
}
if(pHead2.next == null){
break;
}
pHead2 = pHead2.next;
}
return null;
}}



京公网安备 11010502036488号