поменять местами в двусвязном списке

Я пытаюсь поменять местами два узла в двусвязном списке. Ниже приведена часть программы, имеющая функцию подкачки.

 int swap (int x, int y)
{
    struct node *temp = NULL ;
    struct node *ptr1, *ptr2;
    temp = (struct node *)malloc(sizeof(struct node));


    if (head == NULL )
    {
        printf("Null Nodes");

    }
    else
    {
        ptr1 = ptr2 = head;

        int count = 1;
        while (count != x)
        {
            ptr1 = ptr1->next;
            count++;

        }



        int count2 = 1;
        while (count2 != y)
        {
            ptr2 = ptr2->next;
            count2++;   

        }       


        ptr1->next->prev = ptr2;
        ptr1->prev->next = ptr2;
        ptr2->next->prev = ptr1;
        ptr2->prev->next = ptr1;

    temp->prev = ptr1->prev;
    ptr1->prev = ptr2->prev;
    ptr2->prev = temp->prev;

    temp->next = ptr1->next;
    ptr1->next = ptr2->next;
    ptr2->next = temp->next;


    }
    return 0;
}

Когда я запускаю эту программу, в случае 1-го и 2-го узла она вылетает. в то время как в случае любых других узлов, это дает бесконечный цикл вывода. (например: - 2-> 4 2-> 4 2-> 4 .... и т. д.) `.

Я знаю, что есть еще несколько вопросов о замене узлов, но я не нашел ни одного, похожего на мою проблему. Пожалуйста, помогите мне .. !!

Заранее спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос