【发布时间】:2011-07-26 00:40:01
【问题描述】:
这是我们在课堂上做的练习的一部分,我只是想不通......
需要的方法是insertBefore(object data)方法,当用户选择这个方法时,它会提示它在参考数据之前输入要插入的数据(用户输入)
它应该如何运行的示例:
// assuming linked list has data 1,2,3 inserted already
Choose Method:
1)Insert Before
choice: 1 // input by user
====Insert Before====
Enter Reference data: 2 // input by user
Enter Data to be inserted: 5 // input by user
supposed output: 1,5,2,3
这是我的练习代码:(这是在一个名为 LinkList 的类中,带有变量
protected int end;
protected Node start;
还有一个叫做 Node 的内部类)
private class Node
{
public char data;
public Node next;
public Node(char data)
{
this.data = data;
}
}
public void insertBef(char ref,char data)
{
Node temp = new Node(data);
Node current = start;
if(end!=0)
{
for(int i = 1; i<end; i++)
{
if(current == start)
{
Node newNode = start;
newNode.data = current.data;
newNode.next = temp;
current = current.next;
}
else if(current.data == ref)
{
Node newNode = current;
newNode.data = current.data;
newNode.next = temp;
current = current.next;
}
}
end++;
}
else
{
temp.next = start;
start = temp;
}
end++;
}
但是当我运行我的代码时,它会输出3,5,而不是1,5,2,3!我看不出我哪里出错了……
谁能告诉我错误在哪里,并解释我如何解决它?
我知道要能够在参考值之前插入,您应该:
- 为新数据创建一个新节点
- 为参考值和链接做一个临时节点
- 让参考值之前的数据链接指向新节点,让新节点的链接指向临时节点
我似乎无法弄清楚如何在 Java 代码中实现它...
【问题讨论】:
-
end 是否表示列表中的节点数?我注意到 end 不是 0 时会增加两次
-
请发SSCCE。
标签: java linked-list