Reverse a Linked List in groups of given size

Problem Description:

Given a linked list, write a function to reverse every k nodes (where k is an input to the function).Ifalinked list is givenas1->2->3->4->5->6->7->8->NULL and k = 3 then output will be3->2->1->6->5->4->8->7->NULL.

Input:
In this problem,method takes two argument: the head of the linked list and int k. You should not read any input from stdin/console.
The struct Node has a data part which stores the data and a next pointer which points to the next element of the linked list.
There are multiple test cases. For each test case, this method will be called individually.

Output:
Reverse the linked list in the group of given size and return the reference of starting node(head) of the reversed Linked list .

Note:If you use “Test” or “Expected Output Button” use below example format

Problem Link

/*
  Reverse a linked list
  The input list will have at least one element
  Return the node which points to the head of the new LinkedList
  Node is defined as
  struct node
  {
     int data;
     struct Node *next;
  }
*/
struct node *reverse (struct node *head, int k)
{
  // Complete this method
  node *tmp,*lastNode,*t;
  node *root;
  bool first=1;
  node *nNode,*nRoot;
  tmp=head;
  int total=0;
  int idx=0;
  while(tmp)
  {
      for(int i=1;i<=k;i++)
      {
          if(i==1)
          {
              nRoot=new node;
              nRoot->data=tmp->data;
              //nRoot->next=new node;
              lastNode=nRoot;
          }
          else
          {
                nNode=new node;
                nNode->data=tmp->data;
                nNode->next=nRoot;
                nRoot=nNode;
          }
          tmp=tmp->next;
          if(tmp==NULL)
          break;
      }

       if(first)
       {
        root=nRoot;
         first=0;
       }
       else
       {
            t=root;
            for(int i=2;i<=total;i++)
            {
                t=t->next;
            }
            t->next=nRoot;
       }

    total+=k;
  }
  return root;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *