繁体   English   中英

链表获取restoreAt方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM