

思路:
这道题一开始想用双指针做,但是后来没想出来好办法。其实用两趟遍历,用hashmap来计数也可以。
下面就只给出双指针的方法:
两个指针同时从这两个链表的头部出发,每次都往后移动一个结点。到达尾部的指针又从另一个链表的头部出发。这时候当两个指针指向的结点相同时,该节点就是相交的结点。


public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
HashSet<ListNode> set = new HashSet<>();
ListNode p = headA;
ListNode q = headB;
while(p!=null)
{
set.add(p);
p = p.next;
}
while(q!=null)
{
if(set.contains(q))
return q;
q = q.next;
}
return q;
}
本文探讨了一种使用双指针解决寻找两个链表相交节点的问题。虽然初看似乎复杂,但通过两次遍历并利用HashMap记录节点,可以有效地找到相交点。在第一次遍历中,将一个链表的所有节点存入HashMap,然后在第二次遍历中检查另一个链表的节点是否存在于HashMap中,若存在则为相交节点。
1890

被折叠的 条评论
为什么被折叠?



