我有以下家庭作业:
为类
retrieveAt
添加一个新方法IntSLList
,该方法将整数索引位置作为参数。该方法返回索引位置节点内的信息。第一个节点的索引为0.如果列表为空或索引无效,则显示错误消息。
我使用以下代码实现了解决方案:
public int retrieveAt(int pos){
IntSLLNode tmp;
int count = 0;
int c;
for(tmp = head; tmp != null; tmp = tmp.next){
count++;
}
if(isEmpty()|| count<pos){
return 0;
} else {
IntSLLNode tmp1 = head;
for(int i = 1; i < pos; i++){
if(tmp1.next == null)
return 0;
tmp1 = tmp1.next;
}
return tmp1.info;
}
}
它似乎正确遍历列表,但它不会检索正确的元素。
这似乎没有给出正确输出的示例:
IntSLList myn = new IntSLList();
myn.addToHead(10);
myn.addToHead(20);
myn.addToHead(30);
myn.addToHead(40);
myn.addToTail(60);
myn.printAll();
int x = myn.retrieveAt(4);
if(x == 0)
System.out.println("NOT VALID ");
else
System.out.println("elm : " + x);
输出结果为:
40
30
20
10
60
elm : 10
答案 0 :(得分:0)
int x=myn.retrieveAt(4);
你得到第四个元素,因为你使用了神奇的数字4.我建议使用myn中的元素数量,或者在你的IntSLList类的实现中找出你是否有更简单的方法来做到这一点。
答案 1 :(得分:0)
我不确定addToHead应该做什么(在开头或结尾添加)。 我创建了这个两个都做的小例子,请选择适合你术语的方法。
示例绝不是完整的,没有错误检查等。 我试着阅读你的代码并觉得for循环非常令人困惑。 也许这也让你感到困惑?这就是我制作这个例子的原因,它让你进入每个节点的位置,以确定下一步该做什么并递归地工作。
添加元素所涉及的基本操作是: 我知道下一个节点吗? (这是链的末尾吗?) 我应该将自己的值传递给下一个节点还是传递给我的值? (应该在哪里添加新值?结束还是开始?)
public class Node
{
private Node next;
private Integer value;
public Node()
{
}
public void push(Integer value)
{
if(next != null)
next.push(value);
else
{
next = new Node();
this.value = value;
}
}
public void unshift (Integer value)
{
if(next != null)
{
next.unshift(this.value);
}
else
{
next = new Node();
next.value = this.value;
}
this.value = value;
}
public Integer get(int index)
{
if(index > 0)
return next.get(--index);
else
return value;
}
public int length()
{
if(next == null)
return 0;
else
return next.length() + 1;
}
public static void main(String[] args)
{
Node pushedList = new Node();
pushedList.push(10);
pushedList.push(20);
pushedList.push(30);
pushedList.push(40);
for(int i = 0; i < pushedList.length(); ++i)
{
System.out.println("pushed element #" + i +": " + pushedList.get(i));
}
Node unshiftedList = new Node();
unshiftedList.unshift(10);
unshiftedList.unshift(20);
unshiftedList.unshift(30);
unshiftedList.unshift(40);
for(int i = 0; i < unshiftedList.length(); ++i)
{
System.out.println("unshifted element #" + i +": " + unshiftedList.get(i));
}
Node mixedList = new Node();
mixedList.unshift(10);
mixedList.push(20);
mixedList.unshift(30);
mixedList.push(40);
for(int i = 0; i < mixedList.length(); ++i)
{
System.out.println("mixed element #" + i +": " + mixedList.get(i));
}
}
}
编辑:这是我收到的输出:
pushed element #0: 10
pushed element #1: 20
pushed element #2: 30
pushed element #3: 40
unshifted element #0: 40
unshifted element #1: 30
unshifted element #2: 20
unshifted element #3: 10
mixed element #0: 30
mixed element #1: 10
mixed element #2: 20
mixed element #3: 40