2017-05-25 56 views
1

这似乎是一个非常简单的问题。面试官曾要求我在链接列表中找到重复元素,然后他告诉我一些限制使得问题变得困难。约束条件是你只能遍历链表一次。在链接列表中查找重复值(简单转换成困难)

资源

我唯一可用的资源是另一个链接列表。

BONUS

删除元素,如果你可以遍历它只有一次,

的时间应该是O(N)

Q1:我无法找到答案,我不知道解决方案是否存在,或者他只是让我困惑......如果是的话,怎么可能呢?

+0

因此,链表中只有一个重复元素? – nakiya

+0

可能有一个或多个... – Malik

+0

@nakiya你是否得到我的问题 – Malik

回答

0

你可以使用一个HashMap,如果这是用Java实现的,我们可以使用Map数据结构 地图保存键 - 值对和元素可以访问几乎O(1),因此该片段在O(n)

private void removeDuplicates(final Node node) { 
    Map<Integer, Boolean> map = new HashMap<Integer, Boolean>(); 

    Node n = node; 
    Node prev = null; 
    while (n != null) { 
     if (map.get(n.data) == null) { 
      map.put(n.data, true); 
     } 
     else { 
      System.out.println("Found Duplicate of: "+n.data); 

      /*To remove duplicates. do this 
      if (n.next != null) { 
       n.data = n.next.data; 
       n.next = n.next.next; 
       continue; 
      } 
      if (prev != null) { 
       prev.next = n.next; 
      } 
      */ 
     } 
     prev = n; 
     n = n.next; 
    } 

} 
运行
+0

这似乎是好的..但在大O(N)但资源是列表,是没有解决方案列表.... ??? – Malik

+0

@Malik我不确定我是否正确理解你的评论,你问我们是否可以在没有地图的情况下做到这一点? – Oswald

+0

是的,如果我们可以在Map外面做到这一点? – Malik