2010-06-04 73 views
2

我需要將一個Node類中包含的一些對象插入一個LinkedList類中進行排序。節點類看起來像:在Java中的排序鏈接列表中插入

public class Node { 
    private Card val; 
    private Node next; 
    public Node(Card v) { 
     val = v; 
     next = null; 
} 

其中卡實現比較器接口。我試圖編寫一個函數,以鏈接列表類中的卡片值(不是java.util.LinkedList類,而是我寫的鏈接列表類)的順序插入這些卡片(從低到高)。有人知道我能做到嗎?它也不能是一個雙向鏈表。

+1

你在問什麼概念性的步驟,它需要排序這些卡片,或如何實現在Java代碼中的步驟?換句話說,你對算法或實現感到困惑嗎? (或者兩者兼而有之?)關於你已經嘗試了什麼以及你陷入困境的更多細節將會很有幫助。 – 2010-06-04 05:02:56

+0

我正在要求實施。我一直在嘗試的一切都會遇到很多NPE。 – SDLFunTimes 2010-06-04 05:19:59

+2

在這種情況下,您可能會發布您嘗試過的內容。也許你在正確的軌道上,人們可以指出你的具體錯誤。 – MatrixFrog 2010-06-04 06:11:29

回答

1

我認爲你在尋找什麼是像我想出了以下(注意我沒編譯,但它應該給你一個想法,希望可以幫助你)

public class Node { 
    private Card val; 
    private Node next; 

    public Node(Card v) { 
     val = v; 
     next = null; 
    } 
    public Card getVal() { return val; } 
    oublic void setVal(Card v) { val = v; } 
    public Node getNext() { return next; } 
    public void setNext(Node n) { next = n; } 
} 

public class MyLinkList { 
    private Node head = null; 

    public void addNode(Card v) { 
     if (head == null) { 
      head = new Node(v); 
     } else { 
      Node last = null; 
      for (Node node = head; node != null && node.getVal().compareTo(v) < 0 ;) { 
       last = node; 
       node = node.next; 
      } 

      Node newNode = new Node(v); 
      last.setNext(newNode); 
      newNode.setNext(node); 
     } 
    } 
} 
+0

我會刪除節點#setVal方法,它不被使用,並可能只是如果您使用它會破壞排序... – pgras 2010-06-04 07:48:52

+0

我補充說,在最後一分鐘,也像你一樣思考。最後一刻,我只是把它扔在那裏。 – 2010-06-04 14:21:05

0

我有試過這個代碼..它有點凌亂,但可以幫助你..

public static void main(String[] args) { 
    Card[] cards = { new Card(10), new Card(5), new Card(34), new Card(2)}; 
    Node node = new Node(new Card(1)); 
    Node firstNode = node; 
    Node tran = firstNode; 
    for (Card c : cards) { 
    Node newNode = new Node(c); 
    int a=0; 
    do { 
    if(a==1) { 
    tran = tran.getNode(); 
    } 
    if ((tran.getCard().compareTo(c) == -1)) { 
    if (tran.getNode() == null) { 
     tran.setNode(newNode); 
     firstNode = node; 
     break; 
    } else if (tran.getNode() != null && ran.getNode().getCard().compareTo(c) == +1) { 
     newNode.setNode(tran.getNode()); 
     node.setNode(newNode); 
     firstNode = node; 
     break; 
    } 
    } else if ((tran.getCard().compareTo(c) == +1)) { 
    newNode.setNode(tran.getNode()); 
    firstNode = newNode; 
    break; 
    } else if(tran.getCard().compareTo(c) == 0){ 
    newNode.setNode(tran.getNode()); 
    firstNode = newNode; 
    break; 
    } 
    a=1; 
    } while (tran.getNode() != null); 
    tran = firstNode; 
    } 
    Node traversalNode = firstNode; 
    while (traversalNode.getNode() != null) { 
    System.out.println(traversalNode.getCard()); 
    traversalNode = traversalNode.getNode(); 
    } 
}