一、题目描述
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交:
(此处两链表相交后的所有节点均为共用节点,即均是指向同一内存地址的节点)
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
二、解题思路
(1)双重循环。外层循环遍历链表A,内层循环遍历链表B,若当前两指针指向相同节点,则返回。
(2)利用哈希表。利用哈希表存储A中所有节点,遍历链表B,判断当前访问的节点是否在哈希表中,是的话则返回。
三、代码实现
class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
//双重循环
ListNode tempA=headA;
ListNode tempB=null;
while (tempA!=null){
tempB=headB;
while (tempB!=null){
if(tempA==tempB){
return tempA;
}
tempB=tempB.next;
}
tempA=tempA.next;
}
return null;
}
//法二:用哈希表存储链表A的所有节点,遍历链表B,判断当前访问的节点是否在哈希表中,是的话则返回
}