如何将我的add和remove方法从普通链接列表转换为循环链接列表。使用这个代码,我想我需要一个尾部引用,等等?
public void add(int index, Object item)
throws ListIndexOutOfBoundsException {
//our index needs to go in along with our stuff in item
Node temp = new Node(item);
Node current = head;
for(int i = 1; i < index && current.getNext() != null; i++)
{
current = current.getNext();
}
// set the new node's next-node reference to this node's next-node reference
temp.setNext(current.getNext());
// now set this node's next-node reference to the new node
current.setNext(temp);
// current.setPrevious();
numItems++;// increment the number of elements variable
}
public boolean remove(int index)
throws ListIndexOutOfBoundsException {
if(index < 1 || index > size())
return false;
Node current = head;
for(int i = 1; i < index; i++)
{
if(current.getNext() == null)
return false;
current = current.getNext();
}
current.setNext(current.getNext().getNext());
numItems--; // decrement the number of elements variable
return true;
} // end remove
在循环链表中,current.getNext()
不会是null
。当您以另一种方式到达列表末尾时,您必须进行检查(current.getNext() == null
将始终为false
)。
第一个选项是与头节点进行比较,即如果current.getNext() == head
,则current
是列表中的最后一个元素,您可以停止。
但是,由于您无论如何都在计算索引,您也可以确保索引始终在0和size()
之间(您目前在remove方法中也这样做)。