链表中的相邻节点交换,但在输出时缺少 1 个节点



这是我在单链表中为节点交换编写的函数。 还有其他功能追加,删除,长度等。 现在,当执行节点交换时,左侧节点丢失了。 例如。。。。。 链表是 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 locationn");
}
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

最新更新