2016-07-12 4 views
2

У меня возникли проблемы с пониманием этой проблемы растрескивания интервью кодирования:Когда использовать LinkedListNode против LinkedList

Написать код для удаления дубликатов из несортированного связанного списка

Решение:

public static void deleteDups(LinkedListNode n){ 
    Hashtable table = new Hashtable(); 
    LinkedListNode previous = null; 
    while(n != null){ 
     if(table.containsKey(n.data)) { 
      previous.next = n.next; 
     } else{ 
      table.put(n.data, true); 
      previous = n; 
     } 
     n = n.next; 
    } 
} 

Я не понимаю, почему вы передаете LinkedListNode, а не LinkedList. Если вы хотите удалить дубликаты из связанного списка, почему бы вам просто не взять и не перебрать весь список?

+3

Предполагая, что 'n' является главой списка, нет никакой разницы. – shmosel

+0

Возможный дубликат [Что такое LinkedListNode в Java] (http://stackoverflow.com/questions/5374077/what-is-linkedlistnode-in-java) –

+0

Передача узла вместо всего списка позволяет пользователю определить запуск (узел, который нужно начинать), вместо того, чтобы делать весь список. Я не знаю, нужно ли это где-то. Если нет, то нет большой разницы. –

ответ

3

Как следует называть его LinkedList, поэтому, если у вас есть начальный узел, у вас есть список. LinkedList - простая цепочка различных узлов в разных пространствах памяти, не рассматривайте и не ожидайте, что она будет подобна массиву, который является непрерывным куском пространства.

0

Здесь LinkedListNode класс, как

public LinkedListNode{ 
    int data; 
    LinkedListNode next; 

    public LinkedListNode(int data){ 
    this.data = data; 
    next = null; 
    } 

    } 
    LinkedListNode head = new LinkedListNode(1); 
    LinkedListNode node1 = new LinkedListNode(2); 
    LinkedListNode node2 = new LinkedListNode(3); 
    head.next = node1; 
    node1.next = node2; 
    //1->2-3 
    deleteDups(head); 

здесь head узел (данные = 1) является руководителем созданного связанного списка, который мы передаем в deleteDups. В этой функции мы итерируем по списку, используя следующий.

+0

Другое соображение заключается в том, что такой дедупликатор можно использовать, скажем, в «древовидных» или древовидных ситуациях, где вы можете каким-то образом использовать рекурсию *. Однако это действительно произвольное решение. Вы можете правильно написать эту функцию в любом случае. –

Смежные вопросы