160.相交链表

https://leetcode-cn.com/problems/intersection-of-two-linked-lists

题目描述

方法 1:暴力法

思路

对于链表 A 的每个节点,都去链表 B 中遍历一遍找看看有没有相同的节点。

复杂度

  • 时间复杂度:$O(M * N)$, M, N 分别为两个链表的长度。

  • 空间复杂度:$O(1)$。

代码(JavaScript/C++)

JavaScript Code

C++ Code

方法 2:哈希表

思路

  • 先遍历一遍链表 A,用哈希表把每个节点都记录下来(注意要存节点引用而不是节点值)。

  • 再去遍历链表 B,找到在哈希表中出现过的节点即为两个链表的交点。

复杂度

  • 时间复杂度:$O(M + N)$, M, N 分别为两个链表的长度。

  • 空间复杂度:$O(N)$,N 为链表 A 的长度。

代码(JavaScript/C++)

JavaScript Code

C++ Code

方法 3:双指针

思路

如果链表有交点

如果链表没有交点

  1. 两个链表长度一样,第一次遍历结束后 pA 和 pB 都是 null,结束遍历

  2. 两个链表长度不一样,两次遍历结束后 pA 和 pB 都是 null,结束遍历

复杂度

  • 时间复杂度:$O(M + N)$, M, N 分别为两个链表的长度。

  • 空间复杂度:$O(1)$。

代码(JavaScript/C++)

C++ Code

更多题解可以访问:https://github.com/suukii/91-days-algorithm

Last updated

Was this helpful?