链表中的相邻节点交换但在输出 1 节点丢失
Adjacent node swap in linked list but at output 1 node is missing
这是我为单向链表中的节点交换编写的函数。
还有其他功能 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
这是我为单向链表中的节点交换编写的函数。 还有其他功能 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