1、题目描述
2、算法分析
要求找出两个单链表相交的起始结点。且链表中不存在环。
重点是第一个,使用Set集合遍历第一个链表,并把第一个链表的元素添加到Set集合中。
然后继续遍历第二个链表,判断原来的集合中是否包含第一个链表中的元素。
使用boolean b = set.contains(object o);
有一点注意:
Set set = new HashSet():HashSet是无序的
Set set = new LinkedHashSet():LinkedHashSet是有序的。
看具体题目要求。本题只是从集合里面查找,不需要有序。
public void node(ListNode head){ }
方法中的参数表示的是:一个链表的第一个结点,然后head.next,下一个结点,直到head = null,指向null。说明链表已经遍历完
3、代码实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
import java.util.*;
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA == null || headB == null){
return null;
}
Set<ListNode> set = new HashSet<>();
while(headA != null){
set.add(headA);
headA = headA.next;
}
while(headB != null){
if(set.contains(headB)){
return headB;
}
headB = headB.next;
}
return null;
}
}