160. Intersection of Two Linked Lists
Algorithm
本周做的算法题是 160. Intersection of Two Linked Lists。
问题描述
给定两个单链表,写一个函数找出其第一个相交的点。
例子:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
思路
- 使用哈希表法,将遍历单链表A将其每个节点的地址存入哈希表中,再遍历单链表B,检测其节点是否在哈希表中,若存在则返回第一个相交的点。空间复杂度O(n),时间复杂度:O(n+m),其中n是链表A的长度,m是链表B的长度。
1 | public ListNode getIntersectionNode(ListNode headA, ListNode headB) { |
- 若能知道两个链表的长度差为diffLen,然后让长度长的链表先走diffLen部,接着遍历两个链表。若找到
第一个相等的节点,即为相交的点。否则没有相交。时间复杂度O(n+m),空间复杂度为O(1)。
1 | private int getLinkedLen(ListNode head) { |
Author: cloudfeng
Link: https://cloudfeng.github.io/2018/11/30/arts/algorithm/160_Intersection_of_Two_Linked_Lists/
License: 知识共享署名-非商业性使用 4.0 国际许可协议