使用 LinkedList 实现耐心排序

Implementing Patience Sort with LinkedList

根据我的笔记,patience排序是将数据分成若干个bin,然后将这些bin的内容组合成一个完整的列表。

我想我大致了解了如何执行此操作,但其中一个要求是 ints 的列表有 LinkedListstacks 的列表,以及 stack 本身。

所以让我感到困惑的是,当 LinkedList 接受 ints 时,我应该如何 add 每个 stackLinkedList,不是 stacks。我可以将 LinkedList 更改为接受 stacks,但是当我最初创建要在 main 方法中排序的列表时,它是用 ints 完成的。

我知道我遗漏了一些明显的东西,但我看不出如何做到这一点,有什么建议吗?我在下面包含了我的排序方法,以及一些注释掉的如何完成事情的代码(但我不确定它是否正确)。

public void sort() {
    LinkedList listOfStacks = new LinkedList();
    //LinkedList<Stacks> listOfStacks = new LinkedList()<Stacks>;
    int [] listOfInts =  {8, 5, 3, 4, 1, 2, 6, 9, 7};

    for(int i = 0; i < listOfInts.length; i++) {
        LinkedList stack = new LinkedList();
        // No stacks initially, create first stack,
        // and add first element
        if(listOfStacks.getSize() == 0) {
            // listOfStacks.add(stack);
        }

        for(int j = 0; j < listOfStacks.getSize(); j++) {
            if(stack.getSize() == 0) {
                stack.push(listOfInts[i]);
                // listOfStacks.add(stack);
            }
            else if(stack.peek() < listOfInts[i]) {
                stack.push(listOfInts[i]);
                // listOfStacks.add(stack);
                break;
            }
            else {
                LinkedList newStack = new LinkedList();
                newStack.push(listOfInts[i]);
                // listOfStacks.add(newStack);
            }
        }
    }
}

与其尝试将堆栈直接添加到链表,不如将值从堆栈弹出到链表,直到堆栈为空。

或者,如果您可以声明您的堆栈链接列表接受其他链接列表,而不是整数:

LinkedList<LinkedList<Integer>> listOfStacks = new LinkedList<LinkedList<Integer>>();