Reverse a Linked List in groups of given size Java

PROGRAM TO REVERSE A LINKED LIST IN GROUPS OF GIVEN SIZE



import java.util.*;
class MAIN
{
      
/* Link list node */
static class Node 
    int data; 
    Node next; 
}
static Node head = null;
  
/* Reverses the linked list in groups of size k 
and returns the pointer to the new head node. */
static Node Reverse(Node head, int k) 
    // Create a stack of Node* 
    Stack<Node> mystack = new Stack<Node> (); 
    Node current = head; 
    Node prev = null
  
    while (current != null)
    
  
        // Terminate the loop whichever comes first 
        // either current == NULL or count >= k 
        int count = 0
        while (current != null && count < k)
        
            mystack.push(current); 
            current = current.next; 
            count++; 
        
  
        // Now pop the elements of stack one by one 
        while (mystack.size() > 0
        
  
            // If final list has not been started yet. 
            if (prev == null)
            
                prev = mystack.peek(); 
                head = prev; 
                mystack.pop(); 
            
            else
            
                prev.next = mystack.peek(); 
                prev = prev.next; 
                mystack.pop(); 
            
        
    
  
    // Next of last element will point to NULL. 
    prev.next = null
  
    return head; 
  
/* UTILITY FUNCTIONS */
/* Function to push a node */
static void push( int new_data) 
    /* allocate node */
    Node new_node = new Node(); 
  
    /* put in the data */
    new_node.data = new_data; 
  
    /* link the old list off the new node */
    new_node.next = head; 
  
    /* move the head to point to the new node */
    head = new_node; 
  
/* Function to print linked list */
static void printList(Node node) 
    while (node != null
    
        System.out.print(node.data + " "); 
        node = node.next; 
    
  
/* Driver code*/
public static void main(String[] args) 
    /* Start with the empty list */
    //Node head = null; 
  
    /* Created Linked list is 1->2->3->
    4->5->6->7->8->9 */
    push( 9); 
    push( 8); 
    push( 7); 
    push( 6); 
    push( 5); 
    push(4); 
    push(3); 
    push(2); 
    push( 1); 
  
    System.out.println("Given linked list "); 
    printList(head); 
    head = Reverse(head, 3);
    System.out.println();
  
    System.out.println("Reversed Linked list "); 
    printList(head); 


OUTPUT
Given Linked List
1 2 3 4 5 6 7 8 9 
Reversed list
3 2 1 6 5 4 9 8 7

Comments

Popular posts from this blog

Solve the Sudoku Python

Solve the Sudoku Java

Find Duplicates Java