160.Intersection of Two Linked Lists 找出两个链表的交叉部分

题目:找到两个链表相交叉的第一个结点


160.Intersection of Two Linked Lists 找出两个链表的交叉部分_第1张图片

注意:
两个链表有交叉的部分,并且题目需要保持链表的结构,不能轻易去反转。
思想:
通过遍历A链表,将所有的结点放入hashset中。
之后遍历B链表,依次判断hashset中是否有正在遍历的当前结点,如果有,就直接返回,就是开始交叉的结点。

  • java
/**
 * 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) {
        HashSet set=new HashSet<>();
        ListNode p=headA;
        //将a链表的所有结点放入set中
        while(p!=null){
         set.add(p); 
         p=p.next;
        }
        //按顺序判断b链表中的结点在set中是否存在,如果存在就是第一交叉点。
        ListNode q=headB;
        while(q!=null){
           if(set.contains(q))
               return q;
           q=q.next;
        }
        
        return null;
    }
    
}
  • javascript
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} headA
 * @param {ListNode} headB
 * @return {ListNode}
 */
var getIntersectionNode = function(headA, headB) {
    var set=new Set();
    var p=headA;
    while(p!=null){
        set.add(p);
        p=p.next;
    }
    var q=headB;
    while(q!=null){
        if(set.has(q))
            return q;
        q=q.next;
    }
    return null;
};

你可能感兴趣的:(160.Intersection of Two Linked Lists 找出两个链表的交叉部分)