61. Rotate List - cocoder39/coco39_LC GitHub Wiki

61. Rotate List

ListNode* rotateRight(ListNode* head, int k) {
        if (! head) {
            return nullptr;
        }
        
        //size of list and last element of list
        int sz = 1;
        ListNode* last = head;
        while (last->next) {
            sz++;
            last = last->next;
        }
        last->next = head; //cycle the list
        k %= sz;
       
        ListNode* newLast = head;
        while (sz - k > 1) {
            newLast = newLast->next;
            k++;
        }
        ListNode* newHead = newLast->next;
        newLast->next = nullptr;
        return newHead;
    }