title: Is this a correct way to reverse a singly linked list?
body: <p>This is the code that I came up with to reverse a singly-linked-list in Java and I am wondering whether it is correctly done. I know that it works as far as doing its job and having the run time of O(n), but is this a right way to do it or what can be improved? Also what can I do to avoid a stack-overflow problem when reversing a long linked list (without using an iterative alternative), because when trying to reverse a linked list of size greater than 8300, it causes a stack-overflow exception.</p>
  <pre><code>private void reverse(Node node) {
      if(node != this.tail) {
          reverse(node.next);
          this.tail.next = new Node(node.item);
          this.tail = this.tail.next;
          this.head = this.head.next;
      } 
  }
  
  public void reverse() {
      reverse(this.head);
  }
  </code></pre>