java中链表的递归和函数

w3nuxt5m  于 2021-07-03  发布在  Java
关注(0)|答案(4)|浏览(348)

我想对链表的所有值进行递归求和,但不起作用。上面写着:
无法调用“element.sum()”,因为“element.getnext()”的返回值为null

public class Element{
    private int value;
    private Element next;
}

public class MyList{
    private Element elements;
    public int sum(){
        if (elements == null) return 0;
            return elements.getValue() + elements.getNext().sum();
        }
    }
}
x0fgdtte

x0fgdtte1#

sum 甚至不是一种 Element ,所以实现不应该编译。
我将根元素传递给内部 sum 方法,并保留no arg sum 公共方法:

public class MyList {
    private Element elements;

    public int sum() {
        return sum(elements);
    }

    private int sum(Element e) {
        if (e == null) {
            return 0;
        }
        return e.getValue() + sum(e.getNext());
    }
}
s3fp2yjn

s3fp2yjn2#

既然您似乎在尝试学习递归性,而且您似乎真的在尝试,我就不给您一个完整的解决方案了。
首先,我认为您没有提供完整的代码,因为它不会编译。你在打电话吗 elements.getNext().sum() 这意味着在类元素上有一个sum()方法。
实际上,这是一种可能的正确方法,在元素类中使用sum方法,因为您希望在每个元素上都发生递归。
因此,当您以这种方式开始时,您应该继续尝试这种方式:在元素类上添加sum方法。这就是你可以做递归的地方。递归性意味着在另一个示例上或使用另一个参数再次调用同一个方法。。。
另一个答案是可行的,但是你会仅仅通过复制它来学习递归性吗?我建议尝试做类似的事情,但是在element类中,所以您可以自己做

hmae6n7t

hmae6n7t3#

这里有一个解决方案:

public class MyList{

    private Element elements;

    class Element{
        private int value;
        private Element next;
        Element(int value) {
            this.value = value;
        }
        public Element getNext() {
            return next;
        }
        public int getValue() {
            return value;
        }
        public void setNext(Element next) {
            this.next = next;
        }
        public int sum() {
            if (next == null) {
                return value;
            } else {            
                return value + next.sum();
            }
        }
    }

    public MyList(int data[]) {
        Element prev = null;
        for (int value : data) {
            Element e = new Element(value);
            if (prev == null) {
                elements = e;
            } else {
                prev.setNext(e);
            }
            prev = e;
        }
    }

    public int sum() {
        return elements == null ? 0 : elements.sum();
    }

    public static void main(String args[]) {
        MyList list = new MyList(new int[]{ 1, 2, 3});
        System.out.printf("sum = %d\n", list.sum());
    }
}
snvhrwxg

snvhrwxg4#

public class Foo {

    public static void main(String[] args) {
        MyList myList = new MyList();

        for (int i = 1; i <= 10; i++)
            myList.add(i);

        System.out.println(myList.sum());   // 55
    }
}

final class MyList {

    private Element head;

    public void add(int value) {
        if (head == null)
            head = new Element(value);
        else {
            Element element = head;

            while (element.next != null)
                element = element.next;

            element.next = new Element(value);
        }
    }

    public int sum() {
        return head == null ? 0 : head.sum();
    }

    private static final class Element {

        private final int value;
        private Element next;

        public Element(int value) {
            this.value = value;
        }

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

相关问题