title: Reversing LinkedList in Java
body: <p>I am looking at the solution in this post <a href="https://stackoverflow.com/questions/354875/reversing-a-linked-list-in-java-recursively">Reversing a linked list in Java, recursively</a></p>
  
  <p>I copied the one of the solutions below. I've implemented it and it works fine.</p>
  
  <pre><code>public ListNode Reverse(ListNode list)
  {
      if (list == null) return null; // first question
  
      if (list.next == null) return list; // second question
  
      // third question - in Lisp this is easy, but we don't have cons
      // so we grab the second element (which will be the last after we reverse it)
  
      ListNode secondElem = list.next;
  
      // bug fix - need to unlink list from the rest or you will get a cycle
      list.next = null;
  
      // then we reverse everything from the second element on
      ListNode reverseRest = Reverse(secondElem);
  
      // then we join the two lists
      secondElem.Next = list;
  
      return reverseRest;
  }
  </code></pre>
  
  <p>What I do NOT understand is, however, is the last few lines.</p>
  
  <pre><code>secondElem.next = list;
  return reverseRest;
  </code></pre>
  
  <p>It seems we are not returning the secondElem at all? But I debugged through the code and looks like secondElem is already inside reverseRest. Is this because it's a reference by value in Java and it's automatically updated when <code>secondElem.Next=list</code> is applied?</p>