- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力将一个项目添加到链接列表的末尾(这不是家庭作业......只是我自己的练习)。
这是程序:
public class CustomLinkedList {
private static Node head = null;
private int size = 0;
public static void main(String[] args) {
CustomLinkedList myList = new CustomLinkedList();
myList.add(5);
myList.add(9);
myList.add(3);
System.out.println("List Size: " + myList.size);
myList.print();
}
private int size() {
return this.size;
}
private void print() {
Node temp = head;
for (int i=0; i<=size-1;i++){
System.out.print(temp.value + " ");
temp = temp.next;
}
System.out.println();
}
private void add(int value) {
if (head == null) {
head = new Node();
head.value = value;
head.next = null;
size++;
} else {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = new Node();
(temp.next).value = value;
size++;
}
}
}
这是我的 Node 类:
public class Node {
public int value;
public Node next;
public int getValue(){
return this.value;
}
}
这是我认为正在发生的事情:
1. 我有一个以“head”开头的原始/正在进行的列表。
2. 我想添加到该列表中。
3. 要添加它,我需要找到它的结尾。我通过创建一个名为 temp 的新节点(它只是原始列表的副本)来做到这一点。
4. 我遍历副本(临时),直到到达末尾。
5. 到达末尾后,我将创建一个新节点。
对我来说,这就是我的代码停止的地方。现在,在我看来,我需要添加这样的代码:“好吧,你有了新节点,你知道它需要去哪里,所以让我们浏览一下真实的列表并添加它。”
但是我没有。根据我的调试器(下图),正确的事情正在发生,但我没有看到将新节点添加到原始列表的魔力。这是如何运作的?
编辑:
我确实查看了其他实现(例如 here );它看起来非常相似。但是,我仍然找不到为什么它可以在不将 temp 分配给 head (或 head.next)的情况下工作。我相信理论上我得到了链接列表。我只是不明白为什么这个位会起作用。
最佳答案
您的困惑是 temp
与 head
不同。事实并非如此。
它们都是保存对相同Node
对象的引用的变量。通过任一变量所做的更改都会反射(reflect)在它们引用的(同一)对象中。当您将 Node
添加到 temp
时,您会将其添加到 real 列表中。
关于java - 为什么这个 LinkedList addLast 实现可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36253275/
我正在学习 netty,示例代码如下 ChannelPipeline pipeline = pipeline(); // Enable stream compression (you can remo
我目前正在致力于实现一个用于发送数据包的队列。但是,我遇到了一个问题,当我在 LinkedList 上使用 addLast 函数时,它会将列表中的每个 Pair 替换为我添加到其中的 Pair。 队列
我必须在列表末尾添加一个元素,所以现在我使用 LinkedList 的 addLast() 函数在末尾添加元素。它确实在列表中添加元素当且仅当之后没有更多的add()语句。 下面工作正常。 Linke
我正在学习 netty,示例代码如下 ChannelPipeline pipeline = pipeline(); // Enable stream compression (you can remo
如何在双向循环链表的末尾插入一个项目?为什么我运行时会出现 NullPointerException ? public void addLast( String title, double le
我创建了一个 DeQueue 如下 Deque deque = new ArrayDeque(8); // use add() method to add elements in the deque
我正在用 C 语言创建链表数据结构。但是,我在执行 addLast 函数时收到一些奇怪的行为。直到我下次调用 addLast 时,添加的元素似乎才出现。我的代码(我将通过内联注释解释我认为我的代码是如
java.util.LinkedList 中 addLast()、add() 或 Offer() 等效方法的渐近复杂度是多少?是 O(N) 还是 O(1)?也就是说,LinkedList 内部是保留一
我正在努力将一个项目添加到链接列表的末尾(这不是家庭作业......只是我自己的练习)。 这是程序: public class CustomLinkedList { private stati
我在声明 ArrayList 后使用 addLast 方法时遇到问题。这是类代码: import java.util.*; public class Neuron{ public in
我有一个类,它应该创建一个带有值链接列表的哈希表。如果 key 是新的,它会创建一个链接列表,如果它已经存在,则应该将其附加到列表的末尾。由于某种原因,当我使用 addLast() 时,它会替换列表的
import java.util.List; import java.util.LinkedList; class Test { public static void main(String[
这个问题在这里已经有了答案: Linked list head double pointer passing (5 个答案) 关闭 8 年前。 我希望有人能解释为什么我的教授在他给我们的这个示例代码
我有一个奇怪的问题,我真的无法理解。 我用这种方式创建了一个LinkedList: List customList = new LinkedList(); 如果使用 list instanceof L
我的代码: 注意:readInt() 和 readString() 等函数是普林斯顿大学 algs4.jar 包的一部分。 import java.util.Iterator; import java
在我的 Java 应用程序中,以下两个都将编译和运行,并产生所需的结果。 //"Rotate" the list items one place to the left. myLinkedList.a
我有一个 LinkedList在我的项目中,我添加和删除了很多元素(每秒几百个)。这发生在通过锁同步的多个线程中。 现在有时(可能每隔 100.000 个元素)我得到一个 NullReferenceE
ArrayDeque docs声明push(E)与 addFirst(E) 相同,和pop()与 removeFirst() 相同. 我认为使用 addLast(E) 可以达到相同的效果+ remov
我是一名优秀的程序员,十分优秀!