protected void sortHorseList(int iHorseCount)
{
int i = 0;
Horsie currentNode = head;
Horsie auxNode = new Horsie();
boolean foundChange = true;
while(foundChange)
{
foundChange = false;
for(i=0; i<iHorseCount-1; i++)
{
if (currentNode.getHorseValue() > currentNode.getNext().getHorseValue())
{
auxNode.setHorseValue(currentNode.getHorseValue());
currentNode.setHorseValue(currentNode.getNext().getHorseValue());
currentNode.getNext().setHorseValue(auxNode.getHorseValue());
foundChange = true;
}
currentNode = currentNode.getNext();
}
}
}
运行主程序时,此代码显示空指针错误。我是数据结构的新手,我希望能帮助你解决这个问题!请教我如何在双向链接列表中使用冒泡排序 ... HEEELP!
答案 0 :(得分:1)
当你到达列表的末尾时,你不会检查下一个元素是否存在。因此,当您尝试访问它的值时,您将获得空引用异常。你的内循环应该看起来像
Horsie currentNode = head;
Horsie nextNode = currentNode != null ? currentNode.getNext() : null;
while (currentNode != null && nextNode != null)
{
if (currentNode.getHorseValue() > nextNode.getHorseValue())
{
currentNode = Swap(head,currentNode,nextNode);
foundChange = true;
}
else
{
currentNode = nextNode;
}
nextNode = currentNode.getNext();
}
Swap(Horsie current, Horsie next)
在列表中交换current
和next
的位置,如果current
是头节点,则可选择更新头部。
我还会注意到做想要交换列表中的节点而不是交换节点之间的值,除非您确定列表中只包含对节点对象的引用。如果你没有冒险让一些其他类的对象意外地变异,因为你在排序过程中改变了它的价值。