2015-04-11 6 views
2

Я использую связанный список, и я изменил стандартный метод удаления, потому что я хотел вернуть как удаленный узел, который является нормальным, так и возвращать узел перед ним, например, если бы я хотел изменить прямую ссылку, т. е. хвостовой узел на предыдущий узел, я мог бы. Мне было интересно, если использовать hashmap для достижения этого, как показано ниже, это лучший способ сделать это или, если есть лучший способ достичь того, что я хочу? (Примечание: Приведенный ниже код работает, я просто смотрю, чтобы увидеть, если есть более элегантное решение)Связанный список remove method return удаленный узел и новый узел

public HashMap<String, Node> remove(int i) 
{ 
    if(isEmpty()) return null; 
    else 
    { 
     HashMap<String, Node> temp = new HashMap<>(); 
     if(i == 0) 
     { 
      temp.put(REMOVE_NODE_KEY, firstNode); 
      firstNode = (E)firstNode.getNext(); 
      temp.put(REMOVE_NEW_KEY, firstNode); 
     } 

     else 
     { 
      NodeIterator<E> iterator = new NodeIterator<>(firstNode, i, 1); 
      Node prev = iterator.getEnd(); 

      temp.put(REMOVE_NODE_KEY, prev.getNext()); 
      prev.setNext(prev.getNext().getNext()); 
      temp.put(REMOVE_NEW_KEY, prev); 
     } 

     size--; 
     return temp; 
    } 
} 

ответ

1

Пара просто возвращает массив узлов?

temp = Node[2]; 
temp[0] = prev.getNext(); 
temp[1] = prev.getNext.getNext(); 
return temp; 
1

HashMap довольно тяжелый для этого вида использования. На самом деле все, что вам нужно, это своего рода «запись» или «структура» с двумя элементами. Вы можете определить простой класс:

public class NodeAndNewKey { 
    public Node nodeKey; 
    public Node newKey; 
    public NodeAndNewKey(Node nodeKey, Node newKey) { 
     this.nodeKey = nodeKey; 
     this.newKey = newKey; 
    } 
} 

public NodeAndNewKey remove(int i) { //etc. 

Возможно, вы можете найти лучшие имена, чем я.

Еще одна возможность заключается в том, чтобы возвращать массив 2-элемент:

public Node[] remove(int i) { // etc. 

и определим [0] элемент, как проведение «ключ узла» и кнопку [1], как проведение «новый ключ», или без разницы. Мне это не нравится, потому что он менее читабельен, когда вы его используете, но библиотеки Android иногда бывают такими, как это бывает. Вы можете определить константы, такие как public static final int REMOVE_NODE_KEY = 0; public static final int REMOVE_NEW_KEY = 1;, чтобы сделать его более читаемым при извлечении элементов из массива результатов.

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