插入已排序的节点

时间:2016-06-30 10:12:27

标签: java

我正在处理一个方法,该方法将指定的元素插入到排序列表中的正确位置,并且我可以多次插入相同的元素。但是,我的方法没有插入元素,我无法& #39;弄清楚为什么它没有将所有元素插入正确的位置!这是我的代码

3 个答案:

答案 0 :(得分:0)

似乎只有object为空时才插入新项目。但是当在上面的循环中仔细观察时,循环可以退出并且current不为空(首先是if)

因此,如果current为真,则该项目不会进入first if

答案 1 :(得分:0)

else{    //insert into sorted list
        Node d=new Node(element);
        Node current = head;
        Node pre=null;
        while(current!=null){
            if(c.compare(current.item, element)>0){
                break;
            }
            else{
                pre=current;
                current=current.next;
            }
        }
        if(current == null && pre!=null){    //insert new tail
            pre.next=d;
            tail=d;
            d.pre=pre;
            size++;
            return this; 
        }
        else { //insert when compare is successful and node not at tail. 
            d.pre = pre;
            pre.next = d;
            current.pre = d;
            d.next = current;
            return this;
        }
    }

答案 2 :(得分:0)

如果您正在寻找一种方法来创建可以包含多个元素的排序列表,我建议您创建一个类

public class SortedList<E> extends AbstractSequentialList<E> {

}

并实施必要的操作。如果您希望最初对列表进行排序,则可以查看Collections.sort()。之后,无论何时从列表中插入或删除,都可以进行二进制搜索以找到正确的位置。

另一个想法是创建一个类

public class Multiplicity<E> {
    private E value;
    private int numberOfDuplicates;
    // etc. etc.

然后,您可以改为使用SortedSet<Multiplicity<E>>而不是插入已经存在的元素或删除一个元素,而是递增或递减计数器。