【发布时间】:2014-04-26 17:06:54
【问题描述】:
public void delete(int index) {
if (index < 0 || index > count-1) {
throw new ArrayIndexOutOfBoundsException();
}
Node<X> current = head;
if (index == 0) {
current = current.getLink();
count--;
return;
}
for (int i = 0; i < index-1; i++) {
current = current.getLink();
}
current.setLink(current.getLink().getLink());
count--;
}
.
@Test
public void testDeleteSeveral()
{
LList<String> b = new LList<String>();
b.add("hello");
b.add("bye");
b.add("adios");
b.add("ciao");
b.add("see ya");
b.delete(0);
assertEquals(4, b.size());
assertEquals("ciao", b.get(0));
assertEquals("adios", b.get(1));
assertEquals("bye", b.get(2));
assertEquals("hello", b.get(3));
.
public void add(X v)
{
Node<X> a = new Node<X>();
a.setValue(v);
a.setLink(head);
head = a;
count++;
}
在上面写着assertEquals("ciao", b.get(0)); 的地方,我说它应该是“ciao”,因为它删除了第一个节点,但是当我认为“see ya”被删除时,错误出现了,因为它期待“see ya”我做了delete(0); 我错过了什么吗?
编辑:我添加了 add 方法
【问题讨论】:
-
你确定你的 LList 是有序的吗?
-
您的 add 方法没有添加到尾部。它实际上是在头部插入。不确定这是否是故意的,但是当我看到“add()”时,我认为它会添加到尾部,这是插入元素的顺序。所以你好->再见->再见->ciao->再见。但是你的实现是相反的。见 ya->ciao->adios->bye->hello
-
是的,这是故意的