static void reverseAltAppendEnd(listNode head){
//Base Conditions, if linkedlist has less than 3 node then no change required.
if(head == null) return;
if(head.next == null || head.next.next == null) return;
listNode current, result = null, tmp, prev = head;
for(current = head; current != null && current.next != null; current = current.next)
{
// Even node pointer
tmp = current.next;
// Now change current next pointer also keep prev pointer
prev = current;
current.next = current.next.next;
if(result == null){
result = tmp;
tmp.next = null;
}
else
{
tmp.next = result;
result = tmp;
}
}
if(current != null) current.next = result;
else prev.next = result;
}
References:
http://www.geeksforgeeks.org/given-linked-list-reverse-alternate-nodes-append-end/