вставка в отсортированный связанный список в Java - PullRequest
2 голосов
/ 04 июня 2010

Мне нужно вставить некоторые объекты, содержащиеся в классе Node, в класс LinkedList в отсортированном виде. Класс Node выглядит так:

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

где карта реализует интерфейс Comparator. Я пытаюсь написать функцию для вставки этих карт в отсортированном порядке (от низкого до высокого) по значению карты в классе LinkedList (не в классе java.util.LinkedList, а в классе связанного списка, который я пишу). Кто-нибудь знает, как я мог это сделать? Также это не может быть двусвязный список.

Ответы [ 2 ]

1 голос
/ 04 июня 2010

Я думаю, что вы ищете что-то похожее на то, что я описал ниже (обратите внимание, я не компилировал, но это должно дать вам идею и, надеюсь, поможет вам)

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 голосов
/ 04 июня 2010

Я пытался с этим кодом .. он немного грязный, но может помочь вам ..

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();
  }
 }
...