- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个LinkedList
接受 Nodes
的类存储 Integers
.
然后我创建了一个 LinkedList stack = new LinkedList()
,并添加了 Node
s 如果 Node
的数据s 小于 Node
的数据stack
中已存在的 s .
如果没有,我想把这个旧的stack
进入新LinkedList
叫LinkedList pilesOfStacks
,并创建一个newStack
叫LinkedList newStack = new LinkedList()
,并添加较大的 Node
进入此newStack
这也将进入 LinkedList pilesOfStacks
.
我的问题是;因为我已经创建了我的 LinkedList
类接受Node
s,我该如何将其变成新的LinkedList
接受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);
}
}
编辑:如果我可以使用数组,我会创建一个 double 组来达到某种效果 Node[][] array = new Node[20][20];
然后用 Node[i][0]
搜索它,但因为我只能使用 LinkedList
,我想知道如何做到这一点?
最佳答案
好吧,我只是尝试了一下 - 使用 Kami 和 Roman C 提到的 Java Collection Framework。为了避免混淆,我总是使用所涉及的接口(interface)/类的完整限定名称 - 即使这会使代码看起来又大又难看。
我使用了java.util.LinkedList
,它实现了java.util.List
以及java.util.Deque
接口(interface)。后一个为您提供了将其视为堆栈的方法。
从方法名称来看,我假设您实际上想要对堆栈中的节点进行排序。为此,我必须更改原始示例的某些部分,因为它的行为似乎不像您所描述的那样。
我最终得到了您的示例的以下变体:
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,您可能需要在此处应用进一步的更改。
关于java - LinkedList 存储节点的 LinkedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31721374/
我想添加 LinkedList (我们称之为列表 A)到 LinkedList> (称之为列表 B)。执行此操作后,我需要更改列表 A 的值并将其再次添加到列表 B,但不更改已存储在列表 B 中的值。
更新:感谢所有的回答。我发现的最干净的解决方案是这个: if ( k(Arrays.asList(new LinkedList<>())); 我有一个递归方法,可以从列表中生成所有“n 选 k”组合。
在我的 Java 应用程序中,以下两个都将编译和运行,并产生所需的结果。 //"Rotate" the list items one place to the left. myLinkedList.a
我写了一个LinkedList接受 Nodes 的类存储 Integers . 然后我创建了一个 LinkedList stack = new LinkedList() ,并添加了 Node s 如果
这个问题在这里已经有了答案: What does it mean to "program to an interface"? (33 个答案) 关闭 9 年前。 新手 Java 问题: 谁能解释一下
我有一个问题。我无法并排输出我的 LinkedList。我问了这个问题,但遗憾的是我的老师告诉我不要更改方法头或使用 java 库(如日历)。我得到了很多关于使用它或更改方法头的建议。我是根据年级而定
这里有什么问题?。我正在尝试使用邻接列表,通过利用 util 包中的集合来实现图形数据结构。这里 LinkedList array which holds some integer. Each ele
这个问题已经有答案了: Reversing a linked list in Java, recursively (33 个回答) 已关闭10 年前。 如何使用 linkedList 类中的方法以相反
我需要实现一个 LinkedList,到目前为止,我已经编写了在列表中按顺序插入值的方法。我有我的节点 front 作为我的类的实例数据,当创建我的第一个值并尝试将 front 的 next 值设置为
目前,我的 LinkedList(不是 Java 的)类中有一个方法,可以将单个节点添加到 LinkedList 中,如下所示: public void add(int index, T v) {
我正在编写一个读取 XML 文件的类,该 XML 使用“sax”类进行解析。在我的 XML 文件中,我创建了“for”标签和“宏”,使 for 循环能够写入 XML,例如: Th
我正在处理一个 C++ 作业,我将在一个链表的链表上创建一个搜索引擎。根据要求,我不能使用其他库和 STL。 基本上它会是这样的(我从小列表中删除了变量,因为它们是不相关的): 我的结构是这些: st
老实说,我现在真的很困惑这个问题,并且真的不知道如何解决这个问题。我需要编写一个方法,其中给定一个字符链接列表(例如:{'a','A','d','X'})并返回仅包含大写字符的列表(返回:{'A','
我正在尝试获取可执行文件中的两个链表,并在交替位置将它们合并到一起。前任。 ListOne 1,2,3 和 ListTwo 4,5 新的 ListOne 应该是 1,4,2,5,3。 链表.h文件:
这个问题在这里已经有了答案: Is List a subclass of List? Why are Java generics not implicitly polymorphic? (19 个回答
在尝试了解如何将哈希表插入LinkedLists时,我遇到了麻烦。我失去了尝试过的不同事物的数量。我知道我可以使用ArrayList或其他东西,但是我想使它与LinkedLists一起工作,以便可以对
我一直在尝试编写一种方法,不仅可以从 LinkedList(allUsers) 中删除对象(User),还可以从所有用户拥有的单个 LinkedList 中删除。谁能向我解释为什么这是错误的?我已经包
我有一个列表结构和一个名为树的递归函数。在下面的代码中,它永远不会到达 current == null 语句,因此它将永远运行。 如果我无法使用null,解决方案是什么? private void t
这个问题在这里已经有了答案: How does one add a LinkedList to a LinkedList in C#? (3 个答案) 关闭 9 年前。 假设我有以下内容: Link
我正在尝试为 LinkedList 创建一个反向 ListIterator,并且打算将其实现为 linkedList.listIterator(linkedList. size()) 交换了 next
我是一名优秀的程序员,十分优秀!