| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1245 人关注过本帖
标题:关于通讯录通过名字来删除信息,如果我先删除头节点的信息,就会出问题
取消只看楼主 加入收藏
GreenhandG
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-6-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
关于通讯录通过名字来删除信息,如果我先删除头节点的信息,就会出问题
求大神帮忙
void deletbyname(struct telephone* head,char *name)
{
    struct telephone *current;
    struct telephone *pre;
    int p=0;
    current=head;
     if(strcmp(current->name,name)==0)
     {
         head=current->next;
         free(current);
         p=1;
         return;
    }
    while(current!=NULL)
    {
        if(strcmp(current->name,name)==0)
        {
            pre->next=current->next;
            free(current);
            p=1;
            break;
        }
        pre=current;
        current=current->next;
    }
    if(p==0)
        printf("查无此人\n");

[ 本帖最后由 GreenhandG 于 2015-6-22 15:28 编辑 ]
搜索更多相关主题的帖子: current return 通讯录 信息 telephone 
2015-06-22 15:23
GreenhandG
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-6-10
收藏
得分:0 
回复 3楼 TonyDeng
thank you 看完后有帮助,就是不懂为啥要用Note **head做为参数,忘大神赐教
2015-06-22 17:28
GreenhandG
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-6-10
收藏
得分:0 
回复 5楼 TonyDeng
在main中已经声明了一个指向结构体的指针 Node*linkhand     假设我定义的一个函数delet(node*head,....) 我只需要把main中的linkhand传给它不就行了么,这样delet中也能找到链表的头节点,为啥还要多此一举用用**head   我是大一的学生,刚学c不久,望大神耐心指教
2015-06-22 17:59
GreenhandG
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-6-10
收藏
得分:0 
回复 9楼 TonyDeng
嗯,谢谢!我试试
2015-06-22 18:10
GreenhandG
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-6-10
收藏
得分:0 
回复 9楼 TonyDeng
我按您的方式把我1L的代码重新改了下,一开始出现的问题解决了,但还不是十分清楚其中的原理。
未改前我会出现这种情况:假设张三是头结点的信息
The contact name is :张三
The contact number is:123456789
输入要删除的名字:张三
在头结点显示的那个地方
The contact name is:乱码
The contact number is :123456789
把代码改成:
void deletbyname(struct telephone** head,char *name)
{
    struct telephone *current;
    struct telephone *pre;
    int p=0;
    current=*head;
     if(strcmp(current->name,name)==0)
     {
         *head=current->next;
         free(current);
         p=1;
         return;
    }
    while(current!=NULL)
    {
        if(strcmp(current->name,name)==0)
        {
            pre->next=current->next;
            free(current);
            p=1;
            break;
        }
        pre=current;
        current=current->next;
    }
    if(p==0)
        printf("查无此人\n");
}        
       就解决了                  
2015-06-22 18:55
GreenhandG
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-6-10
收藏
得分:0 
回复 12楼 TonyDeng
嗯,都可以删,么问题
2015-06-22 22:12
GreenhandG
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-6-10
收藏
得分:0 
回复 14楼 TonyDeng
本来是想把它分为三部分,删头节点,中间节点,尾节点,后面把中间和尾部的结合在了一起,吧头节点单独考虑的。如果把头结点的代码删掉 就会出错
大神,关于**head和*head的区别及原理,我还是想不通,麻烦您再点拨一下

[ 本帖最后由 GreenhandG 于 2015-6-22 23:30 编辑 ]
2015-06-22 22:22
快速回复:关于通讯录通过名字来删除信息,如果我先删除头节点的信息,就会出问题 ...
数据加载中...
 
   



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

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