Java 中双链表的冒泡排序
Bubble Sort for Dual Linked Lists in Java
我正在尝试为双链表实现冒泡排序,但我得到了 NullPointerException
。
代码如下:
public void bubbleSort()
{
DLLNode<E> tmp = this.first; // (1)
DLLNode<E> tmp2 = null; // (1)
boolean flag = true;
while(flag)
{
// (2)
flag = false;
while(tmp.succ!=null)
{
if(tmp.element2.compareTo(tmp.succ.element2)<0)
{
tmp2.element2 = tmp.element2;
tmp.element2 = tmp.succ.element2;
tmp.succ.element2 = tmp2.element2;
tmp2.element1 = tmp.element1;
tmp.element1 = tmp.succ.element1;
tmp.succ.element1 = tmp2.element1;
flag = true;
}
tmp = tmp.succ;
}
}
}
另外:我用的这个方法我觉得只会循环一次list,不会一开始就回头。我认为将 tmp
和 tmp2
从 (1)
移动到 (2)
可以解决问题。但我仍然收到 NullPointerException
.
这一行似乎是问题所在:
DLLNode<E> tmp2 = null; // (1)
在这里,您创建了一个空指针。几行之后,在没有对 tmp2
进行任何进一步赋值的情况下,您尝试使用此空指针访问 tmp2.element2
,这导致程序崩溃:
tmp2.element2 = tmp.element2;
重新评估您的设计并确保在尝试访问其属性或方法之前已初始化所有对象。
我正在尝试为双链表实现冒泡排序,但我得到了 NullPointerException
。
代码如下:
public void bubbleSort()
{
DLLNode<E> tmp = this.first; // (1)
DLLNode<E> tmp2 = null; // (1)
boolean flag = true;
while(flag)
{
// (2)
flag = false;
while(tmp.succ!=null)
{
if(tmp.element2.compareTo(tmp.succ.element2)<0)
{
tmp2.element2 = tmp.element2;
tmp.element2 = tmp.succ.element2;
tmp.succ.element2 = tmp2.element2;
tmp2.element1 = tmp.element1;
tmp.element1 = tmp.succ.element1;
tmp.succ.element1 = tmp2.element1;
flag = true;
}
tmp = tmp.succ;
}
}
}
另外:我用的这个方法我觉得只会循环一次list,不会一开始就回头。我认为将 tmp
和 tmp2
从 (1)
移动到 (2)
可以解决问题。但我仍然收到 NullPointerException
.
这一行似乎是问题所在:
DLLNode<E> tmp2 = null; // (1)
在这里,您创建了一个空指针。几行之后,在没有对 tmp2
进行任何进一步赋值的情况下,您尝试使用此空指针访问 tmp2.element2
,这导致程序崩溃:
tmp2.element2 = tmp.element2;
重新评估您的设计并确保在尝试访问其属性或方法之前已初始化所有对象。