Problem:
Approach:
Given a singly linked list, rotate the linked list counter-clockwise by k nodes. Where k is a given positive integer.
Approach:
To rotate the linked list, we need to change next of kth node to NULL, next of last node to previous head node, and finally change head to (k+1)th node. So we need to get hold of three nodes: kth node, (k+1)th node and last node.
Solution:
void rotateList(Node *&head, int k)
{
     if (k == 0)
       return;
    Node* curr = head;
    int count = 1;
    while (count < k && curr != NULL)
    {
        curr = curr->next;
        count++;
    }
    if (curr == NULL)
        return;
    Node *kthNode = curr;
    while (curr->next != NULL)
        curr = curr->next;
    curr->next = head;
    head = kthNode->next;
    kthNode->next = NULL;
}
 
