使用 LinkedList 实现耐心排序
Implementing Patience Sort with LinkedList
根据我的笔记,patience排序是将数据分成若干个bin,然后将这些bin的内容组合成一个完整的列表。
我想我大致了解了如何执行此操作,但其中一个要求是 ints
的列表有 LinkedList
,stacks
的列表,以及 stack
本身。
所以让我感到困惑的是,当 LinkedList
接受 ints
时,我应该如何 add
每个 stack
到 LinkedList
,不是 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>>();
根据我的笔记,patience排序是将数据分成若干个bin,然后将这些bin的内容组合成一个完整的列表。
我想我大致了解了如何执行此操作,但其中一个要求是 ints
的列表有 LinkedList
,stacks
的列表,以及 stack
本身。
所以让我感到困惑的是,当 LinkedList
接受 ints
时,我应该如何 add
每个 stack
到 LinkedList
,不是 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>>();