2014-06-18 146 views
0

有序鏈表所以我應該排序字母順序在Java中鏈表(節點是字符串)。我不能使用集合,所以我必須製作自己的鏈接列表和排序算法。我創建了一個方法,可以找到工作中鏈接列表中最大(或最遠的字母)字。現在我試圖通過鏈接列表進行排序,找到最大的元素並將其插入到新的鏈接列表中。然後它刪除最大的,並執行相同的操作,直到鏈接列表爲空。當我運行它時,結束了一個空白列表,我的代碼出了什麼問題?返回最大元素使用Java創建

public Link isLargest(){ 

    Link large = first; 
    Link temp = null; 
    Link current = first; 
    Link after = current.next; 

    while (after != null){ 

     if (large.lastName.compareTo(after.lastName) < 0){ 
      large = after;  
     } 

     temp = current; 
     current = temp.next; 
     after = current.next; 

    } 
    return large; 
} 

要刪除

代碼,我設置了最大的元素,以德前面,然後將其刪除。

private static LinkedList linkSort(LinkedList unsorted){ 

    LinkedList sorted = new LinkedList(); 

    while (!(unsorted.isEmpty())){ 
     Link large = unsorted.isLargest(); 
     sorted.insert(large.name, large.lastName); 
     first = large; 
     unsorted.removeFront(); 
    } 

    return sorted; 
} 
+1

僅供參考,在Java中存在的方法命名約定,使得任何所謂的'isFoo()'返回一個布爾值。如果你想實際得到一個值,你會想命名你的方法'getFoo()'或'findFoo()'或類似的東西,以避免混淆。 – azurefrog

+0

關於你的問題,你的'linkSort()'方法看起來應該是將內容添加到'sorted'中,所以我猜想你傳入的未排序列表是空的,或者你的'isEmpty )'方法。你是否試過在調試器中逐步調試'linkSort()',或者至少放入一些日誌語句來確保你的while循環被執行? – azurefrog

+0

我有點困惑......你需要**創建一個有序的'List' **(如在你的問題的標題中,在這種情況下,你只需要重寫'add()'方法任何典型的'LinkedList'),或者你需要**實際排序**一些'List'? – ccjmne

回答

0

當您找到最大的鏈接後,您將移除LinkedList的頭部(removeFront)處的鏈接。這是不正確的,因爲頭部的鏈接不一定是最大的鏈接。你需要刪除的是最大的鏈接。

+2

這是如何解釋爲什麼返回的排序列表是空的?這應該是一個評論,因此這將是有用的,但它不回答OP的主要問題。 – azurefrog

+0

它沒有。這只是我看到的其中一個問題。我們需要看看insert()方法的樣子。 – fajarkoe