Avoiding use of an initialized variable that will either be changed or ignored
I already explained in my other post, not to use this tempStoragevariable in this way. At least (compared to the other version) you do not change the meaning of it in this version.
If you rename it to something like removedItemFromEvenIndex it could be fine. If and really if the requirement is that all values inside the lists are >= 0.  

If all values are allowed, I would suggest to stick to the solution with the boolean I suggested in the other post. Because if all values are allowed, You can not find any "check" value to see if you removed or something or not.

From where comes this problem? You try to do 2 things together with the tempStorage:


Transport the removed value
Status flag if you removed something or not


You can not address both things with the same Integer, because you already need everything from your Integer for the first part.

Rest is the same as for the other question.



To handle this one, same approach as other question: 

What we want to do here? Add every second element to the new list, starting with the second.

So a simplified description could be:

function oddList(list)
  if list is empty or has only 1 element
    return empty list
  return new list(second element of list, oddList(all elements from the third to the end))


translate to algorithm in Java:

public static List&lt;Integer&gt; oddList(final List&lt;Integer&gt; list) {
    if (list.size() &lt;= 1)
        return new ArrayList&lt;&gt;();

    final List&lt;Integer&gt; newList = new ArrayList&lt;&gt;(Arrays.asList(list.get(1)));
    newList.addAll(oddList(list.subList(2, list.size())));
    return newList;
}




If we take into account the other question, this could be a clever way (you should always try to reuse existing and working solutions):

public static List&lt;Integer&gt; oddList(final List&lt;Integer&gt; list) {
    final List&lt;Integer&gt; newList = new ArrayList&lt;&gt;(list); //we create a copy, otherwise list is modified for the caller
    newList.remove(0); //all indices shifted one to the left
    return even(newList);
}