| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 566 人关注过本帖
标题:链表删除结点函数出了问题 大家帮我看看好吗
取消只看楼主 加入收藏
boogaloo1c
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-30
收藏
 问题点数:0 回复次数:5 
链表删除结点函数出了问题 大家帮我看看好吗
struct message *del(struct message *head)
{
    struct message *p1,*p2;
    int m;
    char name[30];
    if(head==NULL)
 {
     printf("通讯录为空,删除失败!\n");
     return(head);
 }
p1=head;
printf("∞∞∞∞∞∞∞∞∞∞∞∞∞∞\n");
printf("§  请输入需要删除的姓名  §\n");
printf("∞∞∞∞∞∞∞∞∞∞∞∞∞∞\n");
m=0;
gets(name);
     while(p1!=NULL)
     {
      while(strcmp(p1->name,name)!=0&&p1->next!=NULL)
      {
       p2=p1;
       p1=p1->next;
      }
      if(strcmp(p1->name,name)==0)
      {
       m++;
       if(head=p1)
       {
           head=p1->next;
           free(p1);
       }
      else
      {
           if(p1->next=NULL)
           {
               p2->next=NULL;
               free(p1);
           }
           else
           {
               p2->next=p1->next;
               free(p1);
           }
      }
       n=n-1;
          printf("删除成功!\n");
      }
      p1=p1->next;
   
     if(m==0)
     {
      printf("查无此人,删除失败!\n");
     }
     break;
     
  }
return(head);
}
这个函数运行出来是如果删除第二个 那么前两个都删除了 求高手指出错误
搜索更多相关主题的帖子: 姓名 通讯录 message del return 
2011-06-30 21:09
boogaloo1c
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-30
收藏
得分:0 
回复 2楼 oszc
改了 可是还是同样的问题。。。
2011-06-30 21:44
boogaloo1c
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-30
收藏
得分:0 
回复 2楼 oszc
改之后是不论删哪个都是按次序来删除第一个。。。
2011-06-30 21:50
boogaloo1c
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-30
收藏
得分:0 
回复 5楼 h_mastuade
谢谢你啊 我修改之后基本可以正常删除了 但是还是删除不了头结点 麻烦能帮我看一下如何修改才能删除头结点吗?
struct message *del(struct message *head)
{
    struct message *p1,*p2;
    int m;
    char name[30];
    if(head==NULL)
 {
     printf("通讯录为空,删除失败!\n");
     return(head);
 }
p1=head;
printf("∞∞∞∞∞∞∞∞∞∞∞∞∞∞\n");
printf("§  请输入需要删除的姓名  §\n");
printf("∞∞∞∞∞∞∞∞∞∞∞∞∞∞\n");
m=0;
gets(name);
     while(p1!=NULL)
     {
      while(strcmp(p1->name,name)!=0&&p1->next!=NULL)
      {
       p2=p1;
       p1=p1->next;
      }
      if(strcmp(p1->name,name)==0)
      {
       m++;
       p2->next=p1->next;
       free(p1);
       n=n-1;
          printf("删除成功!\n");
      }
      p1=p1->next;
   
     if(m==0)
     {
      printf("查无此人,删除失败!\n");
     }
     break;
     
  }
return(head);
}
2011-06-30 22:17
boogaloo1c
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-30
收藏
得分:0 
回复 7楼 h_mastuade
还是不太明白我们大一学的谭浩强的那本书没有讲到链表的遍历和结点的删除
2011-06-30 22:42
boogaloo1c
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-30
收藏
得分:0 
回复 9楼 h_mastuade
太感谢了 帮了我大忙了 这个论坛就是牛人多
2011-06-30 23:32
快速回复:链表删除结点函数出了问题 大家帮我看看好吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011523 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved