Note that there are some explanatory texts on larger screens.

plurals
  1. POLinked List get method using recursive method
    text
    copied!<p>I was trying to design a get method for a linked list. It takes an int position as an argument and it returns the list element at the given position(position starts at zero).</p> <p>I think my logic is right, but doesn't compile. Could anyone point out what I have done wrong in here?</p> <pre><code>abstract public class AbstractListNode { abstract public Object first ( ); abstract public AbstractListNode rest ( ); abstract public boolean isEmpty ( ); abstract public int size( ); abstract public Object get(int index); // Every other list-processing method goes here. } class NonemptyListNode extends AbstractListNode { private Object myFirst; private AbstractListNode myRest; // cons in Scheme. public NonemptyListNode (Object first, AbstractListNode rest) { myFirst = first; if (rest == null) { myRest = new EmptyListNode ( ); } else { myRest = rest; } } public NonemptyListNode (Object first) { this (first, new EmptyListNode ( )); } // car in Scheme. public Object first ( ) { return myFirst; } // cdr in Scheme. public AbstractListNode rest ( ) { return myRest; } public boolean isEmpty ( ) { return false; } public int size ( ) { return 1+myRest.size(); } public Object get(int index){ if(index+1 &gt; this.size()) throw new IllegalArgumentException ("Out of Range"); else if(index == 0){ return myFirst; } else{ index = index-1; AbstractListNode l = this.myRest; l.get(index); } } } class EmptyListNode extends AbstractListNode { public EmptyListNode ( ) { } public Object first ( ) { throw new IllegalArgumentException ("There is no 'first' value stored in an EmptyListNode."); } public AbstractListNode rest ( ) { throw new IllegalArgumentException ("No elements follow an EmptyListNode."); } public boolean isEmpty ( ) { return true; } public int size( ) { return 0; } public Object get(int index){ throw new IllegalArgumentException ("Out of Range"); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload