[英]linked list get retrieveAt method
我有以下家庭作业:
添加新的方法
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
int x=myn.retrieveAt(4);
您获得了第四个元素,因为您使用了神奇的数字4。我建议您使用myn中的元素个数,或者找出在实现IntSLList类的过程中是否有更简单的方法来做到这一点。
我不确定addToHead应该做什么(在开头或结尾添加)。 我创建了一个同时完成这两个工作的小示例类,请选择适合您术语的方法。
该示例绝不完整,没有进行错误检查等。我尝试阅读您的代码,并感到for循环非常混乱。 也许这也是让您感到困惑的原因? 这就是为什么我创建此示例,使您进入每个Node的位置以找出下一步要做什么并递归工作的原因。
添加元素涉及的基本操作是:我知道下一个节点吗? (这是链的末端吗?)我应该将自己的值传递到下一个节点还是传递给我的值? (应该在哪里添加新值?结束还是开始?)
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.