对Java中的双链表进行冒泡排序

时间:2018-11-09 14:47:08

标签: java linked-list bubble-sort

我正在尝试为双链表实现冒泡排序,但是我得到了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;
        }
    }
}

另一件事:我认为这种方法只会对列表进行一次迭代,并且一开始就不会回头。我认为将tmptmp2(1)移到(2)将解决此问题。但是我仍然收到NullPointerException

1 个答案:

答案 0 :(得分:0)

这行似乎是问题所在:

DLLNode<E> tmp2 = null; // (1)

在这里,您创建了一个空指针。几行之后,没有对tmp2进行任何进一步分配,您尝试使用此空指针访问tmp2.element2,这会使程序崩溃:

tmp2.element2 = tmp.element2;

重新评估您的设计,并确保在尝试访问其属性或方法之前已初始化所有对象。