LinkedList用于存储节点的LinkedList

时间:2015-07-30 10:31:25

标签: java sorting linked-list

我写了一个LinkedList类,接受存储Nodes的{​​{1}}。

我创建了一个Integers,如果LinkedList stack = new LinkedList()的数据小于Node的数据,则已添加Node已存在于此Node

如果没有,我想将旧的stack放入名为stack的新LinkedList中,并创建名为LinkedList pilesOfStacks的{​​{1}},并添加此newStack中的LinkedList newStack = new LinkedList()更大,也会进入Node

我的问题是;由于我已经创建了newStack课程来接受LinkedList pilesOfStacks,因此我如何让它成为新的LinkedList来接受Node LinkedList的{​​{1}} LinkedList中有Nodes个不同的堆?

这是我到目前为止所做的:

LinkedList

编辑:如果我可以使用数组,我会创建一个双重数组到效果LinkedList,然后用public void sort(LinkedList listOfInts) { LinkedList<LinkedList> piles = new LinkedList<LinkedList>(); LinkedList stack = new LinkedList(); for(int i = 0; i < listOfInts.getSize(); i++) { Node x = listOfInts.pop(); for(int j = 0; j < piles.getSize(); j++) { Node y = piles.peek(); //check first element of each pile if( ( ((Comparable)y.getData()).compareTo(x.getData()) ) <= 0) { stack.push(x); break; } } stack.push(x); //put value in stack piles.add(stack); } } 搜索它,但因为我只能使用Node[][] array = new Node[20][20]; ,我想知道怎么做?

1 个答案:

答案 0 :(得分:2)

好的,我只是试了一下 - 使用 Kami Roman C 提到的Java Collection Framework。为了避免混淆,我总是使用所涉及的接口/类的完全限定名称 - ,即使这会使代码看起来大而丑陋

我使用java.util.LinkedList来实现java.util.List以及java.util.Deque接口。后者为您提供了将其视为堆栈的方法。

我假设您从方法名称中确实想要对堆栈中的节点进行排序。为此我必须更改原始示例的某些部分,因为它似乎没有像您描述的那样。

我最终得到了您的示例的以下变体:

public void sort(java.util.Deque<Node> stackOfIntNodes) {
    java.util.List<java.util.Deque<Node>> piles =
            new java.util.LinkedList<java.util.Deque<Node>>();
    java.util.Deque<Node> currentStack = new java.util.LinkedList<Node>();
    inputLoop : while (!stackOfIntNodes.isEmpty()) {
        Node currentNode = stackOfIntNodes.pop();
        for (java.util.Deque<Node> singlePile : piles) {
            // check first element of each pile
            Node smallestNodeInSinglePile = singlePile.peek();
            Object valueOfSmallestNodeInSinglePile =
                    smallestNodeInSinglePile.getData();
            if ((((java.lang.Comparable) valueOfSmallestNodeInSinglePile)
                    .compareTo(currentNode.getData())) <= 0) {
                singlePile.push(currentNode);
                continue inputLoop;
            }
        }
        piles.add(currentStack);
        currentStack = new java.util.LinkedList<Node>();
        currentStack.push(currentNode); // put value in stack
    }
    piles.add(currentStack);
    java.util.Deque<Node> sortedStackOfIntNodes = new java.util.LinkedList<Node>();
    for (java.util.Deque<Node> singlePile : piles) {
        while (!singlePile.isEmpty()) {
            sortedStackOfIntNodes.push(singlePile.pop());
        }
    }
    // RESULT: you got all your Node elements in sorted order
}

但如果您真的使用java.util.LinkedList而不是自己的实现,则可以轻松使用此等效方法:

public void sort(java.util.Deque<Node> stackOfIntNodes) {
    java.util.LinkedList<Node> sortedListOfIntNodes =
            new java.util.LinkedList<Node>(stackOfIntNodes);
    java.util.Collections.sort(sortedListOfIntNodes,
            new Comparator<Node>() {
                @Override
                public int compare(Node nodeOne, Node nodeTwo) {
                    return ((java.lang.Comparable) nodeOne.getData())
                            .compareTo(nodeTwo.getData());
        }
    });
    // RESULT: you got all your Node elements in sorted order
}

根据您的实际Node类和/或自己的LinkedList,您可能需要在此处应用进一步的更改。