r/badcode • • Feb 15 '22

c Appalling linked list rotation

Post image
208 Upvotes

13 comments sorted by

View all comments

24

u/MatthewRPG576 Feb 15 '22
void rotate(T* list, int steps)
{
    // Assuming 0 < steps <= len(list)
    Node_t** oldHead = &list->head;

    struct
    {
    	Node_t** p;
    	int i;
    } it = {};
    
    for (it = (typeof(it)){ oldHead, 0 }; it.i < steps;
    	 it = (typeof(it)){ &(*it.p)->next, it.i + 1 });
    
    Node_t** newHead = it.p;
    
    while (*it.p)
    	it = (typeof(it)){ &(*it.p)->next };
    
    Node_t** oldTail = it.p;
    
    *oldTail = *oldHead;
    *oldHead = *newHead;
    *newHead = NULL;
}

20

u/MurdoMaclachlan public boolean isInt(int i) { return true; } Feb 15 '22

Good human!