【发布时间】:2021-07-05 13:22:27
【问题描述】:
我的目标是通过我创建的列表向后循环,如果一个元素小于我选择的数字t 一个具有t 值的节点将被插入到更小的元素前面。此外,如果列表中的每个元素都大于t,则值为t 的节点将被放置在列表的开头。示例:
DoublyLinkedList<Integer> list = new DoublyLinkedList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.addAtFirstSmaller(4);
System.out.println("Nodelist: " + list.toString());
我应该期待结果:
[1, 2, 4, 3, 4, 5]
但相反,我得到:
[1, 2, 3, 4, 4, 5]
这是我目前的代码:
public void addAtFirstSmaller(T t)
{
ListNode<T> node = tail;
ListNode<T> newNode = new ListNode<T>(t);
while(node.previous != null)
{
int compared = node.previous.element.compareTo(t);
node = node.previous;
if(compared < 0)
{
ListNode<T> temp = node.next;
node.next = newNode;
newNode.next = temp;
newNode.next.previous = newNode;
node.previous = null;
size++;
}
else if(compared > 0 && node.previous == null)
{
addFirst(t);
size++;
}
}
}
对我来说,似乎一切都被推到了右边。有什么想法吗?
【问题讨论】:
-
i should expect the outcome: [1, 2, 4, 3, 4, 5]为什么这是预期的结果?t will be inserted in front of the element that is smaller.如果 t 被插入到一个较小的元素之前,它应该在 3 之后,而不是在它之前。 -
也许我误解了我的任务,任务内容如下:在这种方法中,您从后面遍历列表中的元素(即从列表末尾开始并进行)。一旦列表中的元素小于 t,t 就会添加到该元素前面的列表中。你可以说你从列表的后面开始,找到列表中小于 t 的第一个值(“第一个更小”)并在元素前面添加 t(创建一个你挤压的节点)。跨度>
-
是的,我想你误会了。您当前的输出是正确的。以防万一,我会和你的导师核实一下。
-
刚刚给他发了一封邮件,如果正确的话我会标记这个帖子为已解决。
-
在标记线程关闭之前,请为其创建一个答案,然后接受它。除非其他人在这里给出答案。
标签: java linked-list nodes element doubly-linked-list