链表获取retrieveAt方法

时间:2014-12-12 19:02:04

标签: java

我有以下家庭作业:

  

为类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

2 个答案:

答案 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