这是我为单链表中的节点交换编写的函数。还有其他功能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;
}
问题在此行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