Data structures 在链表中交换相邻节点,但在输出1处缺少节点

Data structures 在链表中交换相邻节点,但在输出1处缺少节点,data-structures,linked-list,swap,Data Structures,Linked List,Swap,这是我为单链表中的节点交换编写的函数。 还有附加、删除、长度等其他功能。 现在,当执行nodeswap时,左侧节点将丢失。 例如 链接列表是 1->2->3 交换之后,它就变成了 1->3 void nodeswap() { 结构节点*p,*q,*r; int i=1,loc,l; l=len(); printf(“要在哪个位置交换节点?\n”); scanf(“%d”、&loc); 如果(loc>l) { printf(“不可能交换,位置之外没有节点\n”); } 其他的 { p=根; 而(

这是我为单链表中的节点交换编写的函数。 还有附加、删除、长度等其他功能。 现在,当执行nodeswap时,左侧节点将丢失。 例如 链接列表是 1->2->3 交换之后,它就变成了 1->3

void nodeswap()
{ 
结构节点*p,*q,*r;
int i=1,loc,l;
l=len();
printf(“要在哪个位置交换节点?\n”);
scanf(“%d”、&loc);
如果(loc>l)
{
printf(“不可能交换,位置之外没有节点\n”);
}
其他的
{
p=根;
而(ilink,;
i++;
}
//访问节点
q=p->link;
r=q->link;
}
//交换
//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

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