我想實現一個鏈接列表,在Java中以相反的順序排序,但add方法給了我奇怪的結果。 我必須實現這個列表(不能只使用LinkedList
,這是我在實踐中會做的),我必須使用遞歸。實現反向排序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);
}
}
這裏的SortedLinkedSetNode:
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]
將if(next == null)
檢入else if
區塊之前else if(el.compareTo(this.getValue()) <= 0)
給出了相同的結果。
我已經無法使頭或這些結果的尾巴了幾個小時:\
爲了測試,我剛剛被檢查內存中的列表。 在任何人問起之前,這確實是功課。我不是在尋找講義,只是幫助。
你重寫了compareTO嗎? – stinepike
爲什麼不只是實現一個「正常」排序的鏈表,而是使用「反向比較器」來代替? – fge
@StinePike yes它會返回節點值的compareTo(即Integer.compareTo) – Prime