Friday, February 28, 2014

Given a linked list, reverse alternate nodes and append at the end



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/

No comments:

Post a Comment