1
week8 作业
发布于: 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; } }}
划线
评论
复制
发布于: 2020 年 07 月 25 日阅读数: 52
Shawn
关注
还未添加个人签名 2017.10.23 加入
还未添加个人简介
评论 (1 条评论)