我正在处理一个方法,该方法将指定的元素插入到排序列表中的正确位置,并且我可以多次插入相同的元素。但是,我的方法没有插入元素,我无法& #39;弄清楚为什么它没有将所有元素插入正确的位置!这是我的代码
答案 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>>
而不是插入已经存在的元素或删除一个元素,而是递增或递减计数器。