Java 实现反向排序LinkedList

Java 实现反向排序LinkedList,java,recursion,linked-list,Java,Recursion,Linked List,我试图在Java中实现一个按相反顺序排序的链表,但是add方法给了我奇怪的结果。 我必须实现这个列表(不能只使用LinkedList,这是我在实践中要做的),我必须使用递归 我插入以测试代码的数组: [-20, 0, -10, 5, 12, 1, -100, -50, -101, 200] 以下是SortedLinkedSet中的相关位: public boolean add(T el) { if (firstNode == null || el.compareTo(firstNode.get

我试图在Java中实现一个按相反顺序排序的链表,但是add方法给了我奇怪的结果。 我必须实现这个列表(不能只使用
LinkedList
,这是我在实践中要做的),我必须使用递归

我插入以测试代码的数组:

[-20, 0, -10, 5, 12, 1, -100, -50, -101, 200]
以下是SortedLinkedSet中的相关位:

public boolean add(T el) {
if (firstNode == null || el.compareTo(firstNode.getValue()) > 0 ) {
    //the new element will become the new first node
    firstNode = new SortedLinkedSetNode<T>(el, firstNode);
    return true;
} else { 
    return firstNode.add(el);
}
}

移动
if(next==null)
else if(el.compareTo(this.getValue())之前检查
else if
块,您的基本情况不正确。如果
el
this.getValue()
您仍然在当前节点之后插入它,这会破坏您的顺序不变


您可以做的一件事是在当前节点之后插入一个新节点,然后将新节点的值更改为当前节点的值,将当前节点的值更改为
el

是否覆盖了compareTO?为什么不实现一个“正常”排序的链表并使用“反向比较器”相反?@StinePike yes它返回节点值的compareTo(即Integer.compareTo)@fge您能更详细地解释一下吗?@fge A“正常排序”链表实现将与此完全相同。感谢您的回复。您的建议大大改进了排序,但由于某些原因,一个整数仍然不合适。结果:[200,12,5,1,0,-20,-10,-100,-50,-101]知道为什么要切换-20和-10吗?新的基本情况是:
SortedLinkedSetNode newNode=new SortedLinkedSetNode(getValue());newNode.next=this.next;this.next=newNode;value=el;
您可能需要添加一些临时调试打印以显示代码正在执行的操作。插入元素的顺序是什么?使用插入的数组编辑问题以测试代码。我只是将它们添加到循环中,从-20开始,以200结束。可能是这样重要的是,先插入-20,这是一个不可靠的元素(-100和-50也被交换)
public boolean add(T el) {


    //reduction steps
        if(el == null)
            return false;
        else if(contains(el))
            return false;
        else if(el.compareTo(this.getValue()) <= 0)
        {
            if(next == null)
            {
                next = new SortedLinkedSetNode<T>(el);
                return true;
            }

            return next.add(el);
        }
        else
        {
            //base case
            SortedLinkedSetNode<T> newNode = new SortedLinkedSetNode<T>(el);
            newNode.next = this.next;
            this.next = newNode;
            return true;
        }
    }
[200, 12, 5, 0, 1, -20, -10, -100, -50, -101]