数据结构链表

时间:2017-07-05 20:30:11

标签: algorithm performance data-structures linked-list big-o

我被要求解决这个问题:

有两个单链表。 我需要编写一个方法来获取这两个链表并返回一个指向这两个列表中后缀相同的起始点的指针。

示例:

给出:

1->2->4->6->8->10->15
2->4->8->10->15

返回的值是指向成员的指针 - 8。

但是, 我需要在不更改列表或使用更多内存的情况下执行此操作, 并且 - 我们只需要扫描一次列表,意味着T(n)=O(n)

2 个答案:

答案 0 :(得分:2)

  1. 测量两个列表的长度
  2. 在较长的列表中向前跳,直到它们的长度相同
  3. 在步骤中向前走两个列表,并记住列表具有不同元素的最后一个点之后的节点。这些是你可以返回的指针。
  4. 现在......我知道你说你只想扫描一次列表,我已经完成了两次,但你说这意味着 T(n)= O(n),这是正确。

    O(n)中扫描列表两次 ,并且需要在不使用无限额外内存的情况下解决问题。

答案 1 :(得分:0)

这是一个伪代码..不是Python代码 取两个列表,让p1指向更长的列表,p2指向更短的列表,

while p1->next!=NULL:
   if p1->value = p2->value:
      p1 = p1->next
      p2 = p2->next
   else:
      p1 = p1->next
      returnpointer = p1->next// if it happens that some elements are same towards end but not the last element.. p1->next would be pointing to NULL anyways and else.. it'll always be the element next to the last element which wasn't same
return returnpointer