1、题目描述
给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null
。
2、题目分析
题目要求是求两个链表第一个相交的结点。
立刻想到Set集合。思路大概是:
将一个链表存储在Set集合中,遍历另一个链表。判断集合中是否包含遍历的链表结点。
3、算法实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
// 使用Set集合,将一个链表的结点全部存储在Set集合中,然后遍历另一个链表获取元素判断是否包含上一个链表的元素
Set<ListNode> set = new HashSet<ListNode>();
//定义遍历结点,指向headA链表的第一个结点
ListNode target = headA;
while(target != null){
set.add(target);
target = target.next;
}
// 以上将headA链表遍历完并且结点全部放到set集合中,遍历headB,并判断集合中是否包含headA的结点
target = headB;
while(target != null){
if(set.contains(target)){
return target;
}
target = target.next;
}
return null;
}
while(alive){
eat();
sleep();
code();
repeat();
}