对象内部的链接迭代

时间:2017-03-09 00:25:58

标签: java iteration

我是编程的初学者,我遇到了链接迭代的麻烦。如果我们有通常的数组:

String[] array = new String[10];

...我们可以根据索引循环迭代,我的意思是,我们可以创建一个for循环:

for(int index = 0; index < array.length; index++) {
//some action
}

但是如果我们有一个对象引用另一个对象?例如:

public class Node {

    private int value;

    private Node next;

    public Node(int value, Node next) {
        this.value = value;
        this.next = next;
    }

    public int sum(Node start) {
        return start.value + start.next.value + start.next.next.value + start.next.next.next.value;
    }

    public static void main(String[] args) {
        Node node4 = new Node(1, null);
        Node node3 = new Node(1, node4);
        Node node2 = new Node(1, node3);
        Node node1 = new Node(1, node2);

       System.out.print(new Node(0, null).sum(node1));
    }
}

在此代码中,我有一个非常糟糕的方法,尝试计算所有value的所有Nodes字段的总和。毫无疑问,我们需要在sum(Node start)中进行迭代,但如果有参考而不是索引,如何实现呢?

3 个答案:

答案 0 :(得分:1)

一种方法是使用简单的while循环。

public int sum(Node start) {
    Node temp = start;
    int result = 0;
    while(temp != null){
       result += temp.value;
       temp = temp.next;
    }
    return result;
}

另一种方法:

public int sum(Node start){
    int result = 0;
    for(Node temp = start; temp != null; temp = temp.next) result += temp.value;
    return result;
}

答案 1 :(得分:0)

你不需要迭代你总结value + next.sum()所以下一个节点将返回value + next.sum(),所以继续......

但你必须验证之前是否存在下一个引用。

所以你的方法总和将会看到这个:

public int sum() {
    return value + (next != null ? next.sum() : 0)
}

答案 2 :(得分:0)

正如我在评论中所建议的那样,我将提供一个迭代器,并为每个循环使用一个迭代它。对于像这样的简单任务来说,这似乎有点太多了,但它会让你的未来工作变得更加容易。

基本思想是:您实现接口Iterator以允许迭代您的节点。然后,让SET tmp="C:\Users\Marc\Desktop\Tempo" SET exe="C:\Users\Marc\Desktop\script\7zip\7za.exe" SET dst="C:\Users\Marc\Desktop\Final\tmp.7z" %exe% "a -t7z %dst% %tmp% -r" 实现Iterable以允许在节点上使用a for each语句。完整的代码看起来类似于:

Node

询问我是否应该提供有关迭代器的更多信息(或者只是谷歌)。此外,您使用的概念称为“链接列表”,搜索此信息以获取更多信息。