链表中相邻节点交换,但输出1节点丢失

问题描述 投票:0回答:1

这是我为单链表中的节点交换编写的函数。还有其他功能append,delete,length等。现在,当执行nodeswap时,左节点丢失。例如.....链接列表是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;


}
data-structures linked-list swap
1个回答
0
投票

问题在此行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

© www.soinside.com 2019 - 2024. All rights reserved.