2014-10-09 35 views
0

我現在在爪哇工作與linkedlists。我們的任務是從頭創建一個,將用戶輸入(字符串)按字母順序排序。我一直在嘗試很多東西,但是我提出的所有概念似乎都行不通。任何建議/提示,將不勝感激。鏈接列表手冊字母順序排序

package linkedlist; 
public class Linked { 

    Node head; 
    int listCount;  

    public Linked(){ 
     head = new Node(null); 
     listCount = 0; 
    } 
    public void add(String data){ 
     Node linkedTemp = new Node(data); 
     Node linkedCurrent = head; 
     while (linkedCurrent.getNext() != null) { 
       linkedCurrent = linkedCurrent.getNext(); 
       } 
     linkedCurrent.setNext(linkedTemp); 
     listCount++; 

    } 

    public void add2(String data){ 
     Node linkedTemp = new Node(data); 
     Node linkedCurrent = new Node(get(1)); 

     if(listCount >= 1){ 

      while (linkedCurrent.getNext() != null){ 

       if(linkedCurrent.getData().compareTo(linkedTemp.getData()) <= 0){ 
        linkedCurrent.setNext(linkedTemp); 
        listCount++; 
        break; 
       } 
       if(linkedCurrent.getData().compareTo(linkedTemp.getData()) >= 0) 
       linkedCurrent = linkedCurrent.getNext(); 
     } 
    } 
    } 

    public String toString() { 
     Node linkedCurrent = head.getNext(); 
     String output = ""; 
     while (linkedCurrent != null) { 
      output += "[" + linkedCurrent.getData().toString() + "]"; 
      linkedCurrent = linkedCurrent.getNext(); 
     } 
     return output; 
    } 
    public String get(int index) 
    { 
     if (index <= 0) 
      return null; 

     Node linkedCurrent = head.getNext(); 
     for (int i = 1; i < index; i++) { 
      if (linkedCurrent.getNext() == null) 
       return null; 

      linkedCurrent = linkedCurrent.getNext(); 
     } 
     return linkedCurrent.getData(); 
    } 
} 
+0

歡迎的StackOverflow!感謝您發佈您的代碼 - 它不起作用?你是否收到異常,或者是不正確地排序節點? – 2014-10-09 23:06:34

+0

兩者都有。我經常得到NullPointers,我仍然不確定我是否在正確的分類正確的軌道上。我被禁止使用數組來幫助排序。我正在嘗試將此類排序轉換爲目前的添加方法。 – 2014-10-09 23:19:00

回答

0

除了排序不起作用,我認爲你的代碼是確定的。例如,

public static void main(String[] args) { 
    Linked linked = new Linked(); 
    linked.add("data3"); 
    linked.add("data2"); 
    linked.add("data1"); 
    System.out.println(linked); 

    System.out.println(linked.get(1)); 
    System.out.println(linked.get(2)); 
    System.out.println(linked.get(3)); 
    System.out.println(linked.get(4)); 
} 

以上測試代碼給出的輸出符合我們的預期。

[data3][data2][data1] 
data3 
data2 
data1 
null 

但正如我告訴過你的,事情是問題的排序部分沒有解決。爲了解決這個問題,我認爲你應該修改代碼的'添加'部分。您的add方法不考慮插入項目的順序。

public void add(String data){ 
    Node linkedTemp = new Node(data); 
    Node linkedCurrent = head; 
    Node linkedPrev = head; 
    while (linkedCurrent != null) { 
     if (linkedCurrent.getData() != null && linkedCurrent.getData().compareTo(data) > 0) { 
      break;    
     } 
     linkedPrev = linkedCurrent; 
     linkedCurrent = linkedCurrent.getNext(); 
    } 
    linkedTemp.setNext(linkedPrev.getNext()); 
    linkedPrev.setNext(linkedTemp); 
    listCount++; 
} 

當你的代碼中使用了「零頭」,這包含了無意義的數據,該while語句檢查內的附加if塊,如果linkedCurrent.getData()不爲空。

上述變形到add方法後,輸出變爲:

[data1][data2][data3] 
data1 
data2 
data3 
null 
+0

非常感謝!我實施了您的修改,一切都運行完美。現在看到它,我感到非常有意義,我不相信我沒有弄明白。實際上現在列表中的第三個字符串似乎有點麻煩。如果我輸入:c,f,d,a,b,e。它輸出爲abdefc – 2014-10-10 00:49:56

+0

*更正*輸入的第一個東西被推到最後。 – 2014-10-10 00:56:00

+0

抱歉給您帶來不便。我修改了答案。在while語句中,while(linkedCurrent.getNext()!= null){'應該改爲'while(linkedCurrent!= null){'。 – 2014-10-10 01:02:11