关于节点头创建的问题。
public void addFirst(E e) { Node node = new Node(e); node.next = head; head = node; size ++; } public void add(int index, E e) { if (index < 0 || index > size) { throw new IllegalArgumentException("add failed, Illegal index"); } if (index == 0) { addFirst(e); } else { Node prev = head; for (int i = 0; i < index - 1; i++) { prev = prev.next; } Node node = new Node(e); node.next = prev.next; prev.next = node; //prev.next = new Node(e,prev.next); size ++; } }
这两段代码是老师课程里面写出来用于增加节点的, 但是我发现如果这么创建下去的话最后一个节点next始终指向head而不是null.
假设第一个节点为n1
那么
head = n1
n1.next = head
然后添加一个元素。
n2
也就是
node.next = prev.next;
prev.next = node;
所以
n1.next = n2
n2.next = head
所以始终不会指向null的
19
收起
正在回答 回答被采纳积分+1
1回答
liuyubobobo
2020-09-12 05:59:36
首先,我们最后一个节点是指向 null 的。我们后续会为整个链表做打印输出,就是使用 null 来停止循环的,你可以使用打印输出函数做测试,或者使用单步跟踪的方式,实际看一下每一个 node 节点的 next 指向的是谁。
其次,我没有很理解你描述的过程:
假设第一个节点为n1
那么
head = n1
n1.next = head ???
这里为什么 n1.next = head???代码的哪里让你认为有这样的逻辑?
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星