Search code examples
javarecursionlinked-listsum

Recursive sum function for a linked list in java


I want to sum up all the values of a linked list recursively but it doesn't work. It says:

Cannot invoke "Element.sum()" because the return value of "Element.getNext()" is 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();
        }
    }
}

Solution

  • Here's a solution:

    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());
        }
    }