【链表】【打卡第138道】:《剑指Offer》3刷:JZ52 两个链表的第一个公共结点

1、题目描述

 2、算法分析 

注意:返回的是两个链表中的第一个公共结点,若两个链表中第一个公共结点。公共结点后面还有结点,则返回的是第一个公共结点以后的那个链表。

本题使用的是Set集合,利用了Set集合的一个重要特性:Set集合中的元素不可重复;

首先将链表pHead1中的结点存储到Set集合中,然后再遍历pHead2链表,判断set集合中是否存在pHead2的结点。存在的话直接返回pHead2。不存在的话直接返回null。

注意:ListNode这个数据结构,结点值val,next指针,构造函数一定有参数。


public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}

3、代码实现

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
import java.util.*;
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        if(pHead1 == null || pHead2 == null){
            return null;
        }
        Set<ListNode> set = new HashSet<>();
        while(pHead1 != null){
            set.add(pHead1);
            pHead1 = pHead1.next;
        }
        while(pHead2 != null){
            if(set.contains(pHead2)){
                return pHead2;
            }
            pHead2 = pHead2.next;
        }
        return null;
    }
}

Guess you like

Origin blog.csdn.net/Sunshineoe/article/details/121727171