与我的设置方法进行斗争,该方法应将列表中指定索引处的元素替换为指定元素,并在指定索引处返回先前的元素。我不确定一切是否正确,但我的问题是最终我将返回什么?
public E set(int index, E element) throws IndexOutOfBoundsException {
if (index < 0) {
throw new IndexOutOfBoundsException();
}
if (index >= size) {
throw new IndexOutOfBoundsException();
}
Node newNode = new Node(element);
Node tempNode = head;
for (int i = 1; i < index; i++) {
tempNode = tempNode.getmNextNode();
}
newNode.setmNextNode(tempNode.getmNextNode().getmNextNode());
tempNode.setmNextNode(newNode);
return ;
}
我的节点类:
public class Node<E> {
private E mElement;
private Node<E> mNextNode;
Node(E data) {
this.setmElement(data);
}
public E getmElement() {
return this.mElement;
}
public void setmElement(E element) {
this.mElement = element;
}
public Node<E> getmNextNode()
{
return this.mNextNode;
}
public void setmNextNode(Node<E> node)
{
this.mNextNode = node;
}}
实际上,您不需要创建新的Node(例如,代码中的newNode)。您可以使用指定的索引转到所需的节点,然后可以替换Element。
public E set(int index, E element) throws IndexOutOfBoundsException {
if (index < 0) {
throw new IndexOutOfBoundsException();
}
if (index >= size) {
throw new IndexOutOfBoundsException();
}
int i = 0;
Node tempNode = head;
while (i < index)
{
tempNode = tempNode.getmNextNode();
i++;
}
E previousElement = tempNode.getmElement();
tempNode.setmElement(element);
return previousElement;
}