Как работает функция удаления максимального элемента в стеке?

Я наткнулся на это замечательную функцию и я хотел бы в ней разобраться, как она работает.

stack* deleteMaxValue(stack* begin) { 
    stack* t = begin, * p = begin->next;
    for (; p; p = p->next)
        if (p->inf >= t->inf)  t = p;
    p = begin;
    if (p != t) {
        while (p->next != t)   p = p->next;
        p->next = t->next;
    }
    else
        begin = t->next;
    delete t;
    return begin;
}

Ответы (0 шт):