Замена смежного узла в связанном списке, но на выходе отсутствует 1 узел - PullRequest
0 голосов
/ 08 февраля 2020

Это функция, которую я написал для замены узла в односвязном списке. Есть и другие функции: добавление, удаление, длина и т. Д. c. Теперь, когда выполняется замена узлов, левый узел пропадает. например ..... связанный список 1-> 2-> 3, после перестановки он становится 1-> 3

void nodeswap()
{ 
    struct node *p,*q,*r;
    int i=1,loc,l;
    l=len();
    printf("At what position you want to swap nodes?\n");
    scanf("%d",&loc);
    if(loc>l)
    {
        printf("Swap not possible , no nodes beyond the location\n");
    }
    else
    {
        p=root;
        while(i<loc-1)
        {
            p=p->link;
            i++;
        }

        //access nodes
        q=p->link;
        r=q->link;
    }

        //swap
        //p,q,r
        //p,r,q
        q=r->link;
        r->link=q;
        p->link=r;


}

1 Ответ

0 голосов
/ 08 февраля 2020

Проблема в этой строке q=r->link; Вам нужно изменить это значение на q->link = r->link

Например, если у вас есть четыре следующих узла в вашем связанном списке с соответствующими указателями

A->B->C->D
p  q  r

Когда вы делаете q=r->link;, это просто меняет настройку на

A->B->C->D
p     r  q

Очевидно, что это не то, что вам нужно, вы хотите установить следующий узел q равным D, и для этого выполните q->link = r->link

...