2010-06-04 70 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(); 
    } 
}