写点什么

week8 作业

用户头像
Shawn
关注
发布于: 2020 年 07 月 25 日

有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,如下图所示的这样,也可能不合并。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。

请用(伪)代码描述算法,并给出时间复杂度和空间复杂度。





代码实现如下,时间复杂度为O(m +n)空间复杂度也是O(m+n)



import java.util.HashSet;
import java.util.Set;
public class ListMergeTest {
static Node test(Node root1, Node root2) {
if (root1 == null || root2 == null) return null;
if (root1 == root2) return root1;
Set<Node> nodes = new HashSet<>();
int count = 0;
while(root1 != null && root2 != null) {
Node curr = root1;
nodes.add(curr);
root1 = root1.next;
count ++;
if (nodes.size() != count) return curr;
curr = root2;
nodes.add(curr);
root2 = root2.next;
count ++;
if (nodes.size() != count) return curr;
}
return null;
}
public static void main(String[] args) {
Node sameNode = new Node(99).next(new Node(100));
Node root1 = new Node(1).next(new Node(2)).next(new Node(3)).next(sameNode);
Node root2 = new Node(11).next(new Node(12)).next(new Node(3)).next(null);
Node result = test(root1, root2);
System.out.println("sameNode value:" + (result == null ? "null" : result.value));
}
private static class Node {
int value;
Node next;
public Node(int value) {
this.value = value;
}
public Node next(Node next) {
this.next = next;
return this;
}
}
}



用户头像

Shawn

关注

还未添加个人签名 2017.10.23 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
作业请加“极客大学架构师训练营”标签,便于分类
2020 年 07 月 27 日 17:09
回复
没有更多了
week8 作业