多语言展示
当前在线:1878今日阅读:19今日分享:20

如何编程获取两个单向无环链表相交的起始节点

题目:编写一个程序,找到两个单向无环链表相交的起始节点,如果两个链表没有交点,则返回 null。约束条件: 在返回结果后,两个链表仍须保持原有的结构,即算法不破坏原始链表结构。本篇经验将分享两个算法,一个是基于哈希表的算法,一个是双指针交叉遍历算法。
工具/原料
1

Eclipse

2

JDK1.8

方法/步骤
1

实现基于哈希表的算法图示,遍历第一个链表,将所有节点放到一个集合中,再遍历第二个链表,判断当前节点是否在集合中,如果在,则为第一个交点,否则,返回 null。

2

编写并运行测试代码,测试基于哈希表的算法图示,主方法中构建两个单向相交无环链表,调用方法获取相交节点,并将节点值打印到控制台。从运行结果上看,输出符合预期。

4

编写并运行测试方法,测试双指针交叉遍历算法图示,构建测试用例,调用算法获取第一个相交节点,并打印到控制台。运行测试方法,观察控制台输出,符合预期。

5

平台分别提交两个算法图示,两个算法均通过用例测试,但双指针交叉遍历算法无论从时间复杂度还是空间复杂度上看,均优于基于哈希表的算法。

注意事项

算法涉及的两个链表均为单向无环链表

推荐信息