C语言链表删除问题

就是先创建一个链表比如3>2>1,然后我想删除2.但是我不会写删除函数,帮忙看看。我的创建函数是正确的,还有我想在删除函数中顺便打印出删除后的结果谢谢了#include<... 就是先创建一个链表比如3>2>1,然后我想删除2.但是我不会写删除函数,帮忙看看。我的创建函数是正确的,还有我想在删除函数中顺便打印出删除后的结果 谢谢了

#include<stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node*next;
}*linklist;

linklist creat()
{int x;
linklist l,p;
l=(linklist)malloc(sizeof(struct node));
l->next=NULL;
scanf("%d",&x);
while(x!=0)
{
p=(linklist)malloc(sizeof(struct node));
p->data=x;
p->next=l->next;
l->next=p;
scanf("%d",&x);}return l;
}
void prin(linklist l)
{
l=l->next;
while(l)
{
printf("%d%s", l->data, l->next?"->":"\n");
l=l->next;
}
}
void remove(linklist l,int x)
{ linklist a;
l=l->next;
while(l)
{
if(l->data==x);
free(a);
l=l->next;}
while(l)
{
printf("%d%s", l->data, l->next?"->":"\n");
l=l->next;
}

}

int main()
{
linklist a;
int n;
a=creat();
prin(a);
printf("输入删除元素");
scanf("%d",&n);
remove(a,n);
return 0;
}
展开
 我来答
四川新华332
2017-11-01 · TA获得超过1361个赞
知道小有建树答主
回答量:1096
采纳率:78%
帮助的人:395万
展开全部
所谓链表,就是用指针将内存中动态分配的结点空间,链接起来成一个表。
所以,建表的过程即是每次为新结点分配内存;因此,释放空间的话,也要从头到尾,一个一个结点的释放,这样才能全部释放掉。
这段代码释放了整个链表空间内存;while循环的作用是从头到尾释放后续结点,如果直接free(pHead)则后面的结点将无法找到,那么造成内存空间泄露。
另外,你的while循环存在一个错误,假设释放了倒数第一个结点后,pHead指向最后一个结点,而最后一个结点的next为NULL,那么这样最后一个结点也没有释放掉,while就退出了。
追问
大神,那应该怎么修改
蒿冰初和雅
2019-09-06 · TA获得超过1204个赞
知道小有建树答主
回答量:1917
采纳率:100%
帮助的人:9.2万
展开全部
这个就需要你判断了,你首先需要将链表的数据全部遍历一遍,在遍历的同时就判断该数据是否为你要删除的数据,如果是,就删除,继续遍历……一直到结束,这样就可以吧1全部删除了。
满意请采纳!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GTA小鸡
高粉答主

2017-11-01 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
BOOL remove(linklist l, int x)
{
    linklist p=l->next;
    if(!p)
    {
        printf("Empty linklist!\n");
        return FALSE;
    }
    while(p&&p->data!=x) p=p->next;
    if(!p)
    {
        printf("Designated data not found!\n");
        return FALSE;
    }
    if(p->next!=NULL)
    {
        linklist q=p->next;
        p->data=q->data;
        p->next=q->next;
        free(q);
    }
    else
    {
        linklist q=l;
        while(q->next!=p) q=q->next;
        q->next=NULL;
        free(p);
    }
    prin(l);
    return TRUE;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吾霓武映寒
2020-04-02 · TA获得超过1038个赞
知道小有建树答主
回答量:1926
采纳率:100%
帮助的人:9万
展开全部
num
应该是链表节点的一个属性
比如
int
num;
num
!
=
p->num;是一句判断语句,在判断
当前节点p的num值
是否与
查询的num值相同,如果相同,代表这个节点就是需要删除的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式