package com.interview.linklist; /** * http://www.geeksforgeeks.org/reverse-alternate-k-nodes-in-a-singly-linked-list/ * Test case * k is even odd * number of nodes are even odd * k is less than or equal to 1. */ public class ReverseAlternateKNodes { public Node reverse(Node head,int k,boolean reverse){ if(k <= 1){ return head; } if(head == null){ return null; } if(reverse){ int i =0; Node front = null; Node middle = head; Node end = null; while(middle != null && i < k){ end = middle.next; middle.next = front; front = middle; middle = end; i++; } head.next = reverse(middle,k, !reverse); head = front; }else{ int i=0; Node temp = head; while(i < k-1 && head != null){ head = head.next; i++; } if(head != null){ head.next = reverse(head.next,k, !reverse); } head = temp; } return head; } public static void main(String args[]){ LinkList ll = new LinkList(); Node head = null; head = ll.addNode(1, head); head = ll.addNode(2, head); head = ll.addNode(3, head); head = ll.addNode(4, head); head = ll.addNode(5, head); head = ll.addNode(6, head); head = ll.addNode(7, head); head = ll.addNode(8, head); ReverseAlternateKNodes ra = new ReverseAlternateKNodes(); head = ra.reverse(head, 3, false); ll.printList(head); } }