链表
o void add(Train) - 创建一个包含参数对象的新节点,并将该节点添加到列表中,使列表保持升序排序顺序 .
o Train delete(int) - 使用参数化列车编号搜索列车 . 如果找到,请从列表中删除它并返回Train对象 . 如果未找到,则返回null .
public void add(Train myTrain)
{
if (myTrain == null) {
currentPosition.setNext=new ListNode(myTrain);
}
currentPosition.setNext(new ListNode(myTrain));
currentPosition = currentPosition.getNext();
count++;
}
public Train delete(int index)
{
ListNode tmp = head;
for (int i = 0; i < index; i++)
{
tmp = tmp.next;
}
tmp.next = tmp.next.next;
count--;
return tmp.train;
}
我的添加和删除无法正常工作 . 我不知道如何删除trainNumber . 我不知道如何在不使用节点索引的情况下执行此操作 .
2 回答
您不是要将火车相互比较以保持排序 . 我会去做类似的事情:
你的删除方法正在返回错误的列车 . 这是一个可视化 . 在你的for循环之后,它看起来像这样:
所以当你做
tmp.next = tmp.next.next
时,你最终得到这个:但是在方法结束时,你正在做
return tmp.train
,正如你所看到的,tmp
仍然指向train 1
,这不是你删除的那个 . 您需要做的是将已删除的节点存储在临时变量中,这样一旦从列表中删除它,您仍然可以访问它:当然,您仍然需要添加一些边界检查以确保
index
在列表中 .