weixin_45490561 2019-11-12 22:22 采纳率: 0%
浏览 444

单链表中我想删除一个数据域的值为x的节点编写了这个函数运行出来不能实现这个功能请问为什么?大佬们

void SC(splist*L)
{
    printf("请输入要删除的数");
    int a;
    scanf("%d",&a);
    splist *p;
    splist *h;
    p=L->next;
    while(p!=NULL)
    {
        if(p->data=a)
        {
            L->next=L->next->next;
            h=p;
            free(h);
            break;
        }
        else if(p->next->data=a)
        {
            p->next=p->next->next;
            break;
        }
        p=p->next;
    }
}
  • 写回答

3条回答 默认 最新

  • 旧时光~ 2019-11-13 09:10
    关注

    if里 应该操作 p吧 不应该操作l,而且else if里 p->next可能是null。
    个人的一点建议
    单链表删除结点,你可以让
    1.p指向前一个结点,h指向当前操作结点
    2.判断h->data是否等于a
    3.若等于a 让p后继指向h后继,然后释放h p->next=h->next;free(h);
    4.若不等于a 让p和h都向后移动 p=p->next; h=h->next;

    评论

报告相同问题?

悬赏问题

  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?