循环链表中索引处的元素

时间:2016-08-03 11:48:00

标签: java

我正在阅读有关循环链接列表的内容。这是一个我不明白它是如何工作的代码。

public int elementAt(int index){
        if(index>size){
            return -1;
        }
        Node n = head;
        while(index-1!=0){ // this line is unclear for me
            n=n.next;
            index--;
        }
        return n.data;
    }

我会以相同的方式编写相同的代码:

public int elementAt(int index){
        if(index>size){
            return -1;
        }
        Node n = head;
        while(n.size != index){ // here is my change in the code
            n=n.next;
        }
        return n.data;
    }

以下是整个代码:http://algorithms.tutorialhorizon.com/circular-linked-list-complete-implementation/

我在第二段代码中做得对吗?

由于

3 个答案:

答案 0 :(得分:1)

示例代码使用基于1的索引:1,2,3,...,size。这在计算机科学中很奇怪,人们会期望:0,..,size-1。

不幸的是size是整个列表的属性,而不是列表中的单个节点。所以他们的解决方案很好。

虽然当索引< = 0时会发生好事。

对于真正的循环列表,节点具有previous字段。最后一个节点通过两种方式链接到第一个节点。

在这种情况下,您可以按照nextprevious向两个方向行走。 然后当索引< size / 2 one next转发到索引,或者返回previous for about(size-index)步骤。为了采取最少的步骤。

答案 1 :(得分:0)

它只是在做计数。你可以用各种方式做到这一点。我假设大小是您的LinkedList的大小。在这种情况下,您的代码是错误的。你可以这样做

public int elementAt(int index){
        if(index>size){
            return -1;
        }
        Node n = head;
        int i = 0; // zero-indexing
        while(i++ != index){ // you can increment i at the end too
            n=n.next;
        }
        return n.data;
    }

第一个代码也在计算,但它不是使用另一个变量,而是使用现有的

答案 2 :(得分:0)

您不理解的行只是计算"索引"位置是向前的,它从头开始。所以这个方法会让你回到元素" index -1"头部元素的位置 其他假设是头元素为1