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

【160.Intersection|160.Intersection of Two Linked Lists 找出两个链表的交叉部分】题目:找到两个链表相交叉的第一个结点

160.Intersection|160.Intersection of Two Linked Lists 找出两个链表的交叉部分
文章图片
注意:
两个链表有交叉的部分,并且题目需要保持链表的结构,不能轻易去反转。
思想:
通过遍历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; };

    推荐阅读