关于C语言链表问题

浅尝即止何来突破 2018-01-09 10:16:38
struct word
{char c[20];
struct word *next;
}; //这里是结构体定义

void del_word(struct word *head,char *w) //通过这个函数,我要删去结构体的成员c与字符数组相同的结构体
{ int j,b=0;
struct word *p1,*p2;
p1=p2=head;
while(p1!=NULL)
{
for(j=0;p1->c[j]!=0;j++)
{
if(p1->c[j]!=w[j])break;
if(p1->c[j+1]==0&&w[j+1]==0&&p1->c[j]==w[j])
{
p2->next=p1->next;
p1=p1->next;
b=1;
break;
}
}
if(b==1)b=0;
else
{
p2=p1;
p1=p1->next;

}

}
} //通过这个函数,我发现如果要删除的成员位于头结点我不能够删掉该结点。但可以删除除头结点外的其他结点,为什么呢?求详解!!!!!
...全文
727 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-01-10
  • 打赏
  • 举报
回复
#include <stdio.h>

struct word
{
    char c[20];
    struct word *next;
};

void del_word(struct word **head,char *w)
{
    struct word *pcur, *prev;

    prev = *head;
    if (strcmp(prev->c, w) == 0) {
        *head = (*head)->next;
        free(prev);
        return;
    }

    pcur = (*head)->next;
    while (pcur) {
        if (strcmp(pcur->c, w) == 0) {
            prev->next = pcur->next;
            free(pcur);
            return;
        }
        prev = pcur;
        pcur = pcur->next;
    }

}
参考一下吧;能够实现一次删除一个节点(若找到匹配w的word) 若要删除的节点是头结点,那么需要传二重指针进去,因此形参也是需要是二重指针。
赵4老师 2018-01-10
  • 打赏
  • 举报
回复
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
真相重于对错 2018-01-10
  • 打赏
  • 举报
回复
1`、你的程序很可能有内存泄露,因为没有对指针free 2、一个函数传入一个指针,修改它指向内存的内容,函数返回后,能够起作用。但是修改这个指针指向的地址,函数返回后不起作用,所以Head依然还是head
  • 打赏
  • 举报
回复
拜托各位了解的老师们!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧