Java中双链表的冒泡排序[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
        }
    }
}

另一件事:我使用的这种方法我认为只会迭代一次列表,并且不会在开始时回头。我认为将tmptmp2(1)移动到(2)可以解决问题。但我仍然收到一个NullPointerException

答案

这条线似乎是问题所在:

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

在这里,您已经创建了一个空指针。几行后,没有任何进一步分配给tmp2,你试图使用这个空指针访问tmp2.element2,这会导致程序崩溃:

tmp2.element2 = tmp.element2;

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

以上是关于Java中双链表的冒泡排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

双链表上的冒泡排序

在java中使用单链表和冒泡排序进行编码

Java实现冒泡排序详细代码

Java中双链表的问题

java冒泡排序法代码

Java如何重复排序直到在冒泡排序中没有进行交换?