【问题标题】:Adjacent node swap in linked list but at output 1 node is missing链表中的相邻节点交换但在输出 1 节点丢失
【发布时间】:2020-02-08 14:53:38
【问题描述】:

这是我为单链表中的节点交换编写的函数。 还有其他功能追加,删除,长度等。 现在,当执行 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】:

    问题出在这一行q=r-&gt;link; 你需要把它改成q-&gt;link = r-&gt;link

    例如,如果您的链表中有以下四个节点,并带有相应的指针

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

    当您执行q=r-&gt;link; 时,这只是将设置更改为

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

    显然这不是你想要的,你想将 q 的下一个节点设置为 D,并实现 q-&gt;link = r-&gt;link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多