架构师训练营—第八周作业
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,如下图所示的这样,也可能不合并。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用(伪)代码描述算法,并给出时间复杂度和空间复杂度。
时间复杂度: O(m + n), m 和 n 分别是链表 1 和链表 2 的长度;
空间复杂度: O(1)
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,如下图所示的这样,也可能不合并。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用(伪)代码描述算法,并给出时间复杂度和空间复杂度。
public class Node { public int val; public Node next;}
public class Solution { public Node intersectionPointOfTwoLinkedList(Node list1, Node list2) { int length1 = length(list1), length2 = length(list2); Node headLong = null, headShort = null; if (length1 - length2 > 0) { headLong = list1; headShort = list2; } else { headLong = list2; headShort = list1; } int diff = Math.abs(length1 - length2); for (int i = 0; i < diff; i++) { headLong = headLong.next; } while (headLong != null && headShort != null && headLong != headShort) { headLong = headLong.next; headShort = headShort.next; } return headLong; } private int length(Node list) { int length = 0; if (list != null) { Node p = list; while (p != null) { length++; p = p.next; } } return length; }}
时间复杂度: O(m + n), m 和 n 分别是链表 1 和链表 2 的长度;
空间复杂度: O(1)
还未添加个人签名 2020.02.02 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论