Сортировка двухсвязного списка

Нужно оформить сортировку двухсвязного списка, я сделала определенную функцию, но она ничего не сортирует или выбивает с ошибкой. Как сделать сортировку по буквам?

Вот моя структура:

struct spis
{
    char name[45];
    float sc;
    float cnt;
    double sq;
    struct spis *v1; // v1 – указатель на предыдущую структуру
    struct spis *v2;
};

Вот еще две глобальные структуры:

struct spis *head, *tail;

Вот функция для сортировки, которую я не доделала до конца:

void sort(spis *p) {
    spis  *pn,*tmp;

    if (p = head) {
        pn = p->v2;
        while (p != NULL) {

            if (strcmp(pn->name, p->name) > 0) {
                tmp = p;
                p = pn;
                pn = tmp;
            }
            p = p->v2;
            pn = pn->v2;
        }
    }
}

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