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;

    评论

报告相同问题?