添加数字时对链接列表进行排序

我正在尝试创建一个排序的链表,该链表在Java中添加新数字时进行排序。我希望程序工作的方式是将新节点插入正确的位置,以便对其进行排序。但是,我不断收到NullPointerException。这是我的代码:


public void Add(int d){

        Node newNode = new Node(d);

        if(first == null){

            first = newNode;

            return;

        }

        Node cur = first.next;

        Node prev = first;

        if(newNode.data > prev.data){

            newNode.next = first.next;

            first = newNode;

            return;

        }

        while(cur.next != null){

            if(cur.data < newNode.data && prev.data > newNode.data){

                newNode.next = cur;

                prev.next = newNode;

            }

            cur = cur.next;

            prev = prev.next;

        }

        cur.next = newNode;


    }

我不知道为什么它不起作用。


胡子哥哥
浏览 136回答 2
2回答

慕的地8271018

如果您的数字集合不能包含任何重复项(每个数字只能出现一次),则只需使用TreeSet<Integer>。TreeSet保持其自身的排序,并且不允许重复。这将比每次将表放入列表时都进行排序的列表更加有效和易于使用。如果您的数字集合可以包含重复项,那么您将需要使用更复杂的方法。我会使用a,TreeMap<Integer, Integer>以便地图键是您的数字,地图值是该数字已添加到地图的次数。关于您现有的代码,未分配对象的任何对象引用将默认为,null并且您不能调用任何方法或引用引用中的任何字段null(或“空指针”)。

繁星淼淼

当您将curr = first.next设置为null时,这是您从中获取空点异常的地方...将来,通过在IDE中使用调试器功能可以很容易地弄清楚这个问题,我敦促您获得熟悉此功能将为您节省数小时的烦恼!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java