Java 为什么赢了';我的链表不能添加节点吗?(爪哇)
我试图在链接列表的末尾添加一个新节点,但它似乎没有任何作用。它添加了第一个元素,因为这是一个特例,但在调试过程中会忽略所有其他赋值 下面是我正在运行的测试:Java 为什么赢了';我的链表不能添加节点吗?(爪哇),java,linked-list,Java,Linked List,我试图在链接列表的末尾添加一个新节点,但它似乎没有任何作用。它添加了第一个元素,因为这是一个特例,但在调试过程中会忽略所有其他赋值 下面是我正在运行的测试: @Test public void testInsertElement() { PriorityList<String> list = new LinkedPriorityList<String>(); list.insertElementAt(0, "first"); list.insertElementAt(1,
@Test
public void testInsertElement()
{
PriorityList<String> list = new LinkedPriorityList<String>();
list.insertElementAt(0, "first");
list.insertElementAt(1, "second");
list.insertElementAt(2, "third");
assertEquals("first" , list.getElementAt(0));
assertEquals("second", list.getElementAt(1));
assertEquals("third" , list.getElementAt(2));
}
@测试
public void testInsertElement()
{
PriorityList=新建LinkedPriorityList();
列表。插入元素(0,“第一”);
列表。插入元素(1,“第二”);
列表.插入元素(2,“第三”);
assertEquals(“第一”,list.getElementAt(0));
assertEquals(“第二个”,list.getElementAt(1));
资产质量(“第三个”,list.getElementAt(2));
}
第二个断言失败,因为在第一个断言之后没有添加任何内容
以下是节点对象的构造函数:
public class LinkedPriorityList<E> implements PriorityList<E> {
private class Node
{
private E data;
private Node next;
public Node(E element)
{
data = element;
next = null;
}
}
公共类LinkedPriorityList实现了PriorityList{
私有类节点
{
私人电子数据;
私有节点下一步;
公共节点(E元素)
{
数据=元素;
next=null;
}
}
最后是我失败的代码:
public void insertElementAt(int index, E element) throws IllegalArgumentException
{
if(index>size() || index<0) //can only be between 0 and size()
throw new IllegalArgumentException();
if(size()==0)
first = new Node(element); //adding the first element. This works
else
{
if(index == size()) //if an element is being added to the end
{
Node ref = first; //assigning ref to the first element of the list
for(;ref!=null; ref = ref.next); //stepping through the list until ref is null
ref = new Node(element); //assigning the null reference a new Node. Doesn't assign
}
else //if an element is being inserted in the list. untested...
{
Node ref = first;
Node temp = new Node(element);
for(int i=1; i<index; i++)
ref = ref.next;
temp = ref.next;
ref = temp;
}
}
size++; //keeping track of how many elements in list
}
public void insertElementAt(int索引,E元素)抛出IllegalArgumentException
{
如果(index>size()| | index当index==size
时,您希望创建一个新节点,找到列表中的最后一个节点,并将新节点分配给其下一个指针
最后一个节点的next
指针为空
这应该足以让您自己实现算法。当索引==size
时,您希望创建一个新节点,找到列表中的最后一个节点,并将新节点分配给其下一个
指针
最后一个节点的next
指针为空
这应该足以让您自己实现算法。在末尾添加时也需要一个temp
节点(以跟踪最后一个元素)
只需将新的节点
分配给ref
;它不会将其链接到当前最后一个节点的下一个
,在末尾添加时也需要一个临时
节点(以跟踪最后一个元素)
只需将新的节点
分配给ref
;它不会将其链接到当前最后一个节点的下一个
,这可能就是您的意图:
for(; ref.next != null; ref = ref.next) {
/* intentionally empty */
}
ref.next = new Node(element);
请注意,我正在测试和分配ref.next
,而不是ref
本身。这可能就是您想要做的:
for(; ref.next != null; ref = ref.next) {
/* intentionally empty */
}
ref.next = new Node(element);
请注意,我正在测试和赋值ref.next
,而不是ref
本身。如果大小不是0,则insertElementAt方法没有任何用处。它最终会给局部变量赋值,但仅此而已。它从未将新元素添加到列表中。您希望这样做的语句是什么?抱歉,我没有包含It、 First实际上是一个全局实例变量如果大小不是0,那么insertElementAt方法就没有任何用处。它最终为局部变量赋值,但仅此而已。它从不向列表中添加新元素。您希望使用哪条语句?抱歉,我没有包含它。First实际上是一个全局实例变量AM I唯一发现while循环在这里更具可读性,并且不需要任何注释的方法是?@JBNizet,并将其提取到一个方法中,即getLastNode()
。我同意,但我尽量减少对他的代码的更改,这样他就可以很容易地找到该部分的位置。我是唯一一个发现while循环在这里可读性更高,并且不需要任何注释的人吗?@JBNizet,并将其提取到一个方法中,即getLastNode()
。我同意,但我尽量减少对他的代码的更改,这样他就可以很容易地找到这部分应该放在哪里。
for(; ref.next != null; ref = ref.next) {
/* intentionally empty */
}
ref.next = new Node(element);