题目
输入两个链表,找出它们的第一个公共结点。
解析
预备知识
2个单向链表相交后的示意图如下所示:
从上图的得知,若两个链表相交,那么这两个链表应该具有相同的尾部,也就是说呈现出Y型。因为单向链表中只有一个next域指向后继结点,所以从第一个相交点开始都是两个链表的公共部分,而不是我们思维惯性以为相交后就岔开了,不明白的再仔细看看上图即可。
思路一
空间换时间的做法,既然若相交,必有公共节点。所以我们可以申请一个set,遍历第一个链表,存放所有的节点。然后遍历第二个节点,若发现set中已存在该节点,那么就说明从这个节点开始两个链表相交,该节点就是第一个公共节点。
/**
* 空间换时间
* @param pHead1
* @param pHead2
* @return
*/
public static ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1 == null || pHead2 == null) {
return null;
}
Set<ListNode> set =