题目来源:
leetcode题目,网址:LCR 023. 相交链表 - 力扣(LeetCode)
解题思路:
遍历两链表的同时使用哈希表记录已遍历过的节点,若某节点曾在链表中出现过,则该节点为相交节点,否则返回 null。
解题代码:
/**
* 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<ListNode> set=new HashSet<>();
while(headA!=null || headB!=null){
if(headA!=null){
if(set.contains(headA)){
return headA;
}
set.add(headA);
headA=headA.next;
}
if(headB!=null){
if(set.contains(headB)){
return headB;
}
set.add(headB);
headB=headB.next;
}
}
return null;
}
}
总结:
官方题解给出了两种解法。第一种是哈希表。第二种是双指针,初始时,指针指向两链表头部,将两链表不断后移直至两指针都指向 null 或两指针都指向同一节点,期间若某一指针指向null,将其指向另一链表的头部。