我使用链接列表并且我更改了标准的删除方法,因为我想要返回已删除的节点,这是正常的,但也返回它之前的节点,例如,如果我想更改直接引用即我可以前一个节点的尾节点。我想知道如果使用hashmap来实现这一点,如下所示是最好的方法,或者是否有更好的方法来实现我想要的? (注意:下面的代码可以解决,我只是想看看是否有更优雅的解决方案)
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;
}
}
答案 0 :(得分:1)
您只需返回一组节点吗?
temp = Node[2];
temp[0] = prev.getNext();
temp[1] = prev.getNext.getNext();
return temp;
答案 1 :(得分: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;
之类的常量,以便在从结果数组中检索元素时使其更具可读性。