1. 题目描述
给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null
。
2.思路
首先得确定两条链表是否为空,如果为空或者任意一方为空,则不可能相交
其次遍历链表 headA\textit{headA}headA,并将链表 headA\textit{headA}headA 中的每个节点加入哈希集合中。然后遍历链表 headB\textit{headB}headB,对于遍历到的每个节点,判断该节点是否在哈希集合中
如果当前节点不在哈希集合中,则继续遍历下一个节点;
如果当前节点再哈希表中,则返回当前节点,后续节点无需再看
3.
//1.可用哈希表进行存储A的节点,再将吧B的节点放入进入,如果有重复,职责返回
Set<ListNode> visited = new HashSet<ListNode>();
ListNode tmp =headA;
//2.先存入A节点
while(tmp!=null){
visited.add(tmp);
tmp=tmp.next;
}
//3.再将b存入
ListNode tmpb = headB;
while(tmpb!=null){
if(visited.contains(tmpb)){
return tmpb;
}
tmpb=tmpb.next;
}
return null;
时间复杂度Om+n)m,n分别为两条链表的长度
空间复杂度O(m)