| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 579 人关注过本帖
标题:请大家帮忙看看这个函数错在哪里
只看楼主 加入收藏
wuzi2010ED
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-6
结帖率:100%
收藏
 问题点数:0 回复次数:6 
请大家帮忙看看这个函数错在哪里
/*函数功能: 从head指向的链表中删除节点数据大于100的节点
  函数参数: 结构体指针变量head,表示原有链表头结点指针
  返回参数: 删除节点后的头结点指针
*/

struct Link *DeleteNode(struct Link *head)
{
    struct Link *p = head, *pr = head;

    if (head == NULL)
    {
        printf("No Link Table!");
        return head;
    }

    while (pr != NULL)
    {
        while (p->data <= 100)
        {
            pr = p;
            p = p->next;
        }
        if (p == head)
        {
            head = p->next;
        }
        else
        {
            pr->next = p->next;
        }
    }
   
    free (p);
    return head;
}
搜索更多相关主题的帖子: head return 结构体 
2012-06-06 11:34
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
这是什么代码呀?

总有那身价贱的人给作业贴回复完整的代码
2012-06-06 12:17
Sunnyherb
Rank: 1
来 自:广西
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-6
收藏
得分:0 
表示正在学习中!!!

做自己的事,走自己的路!
2012-06-06 12:22
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
没有看到哪句在删除节点的。。。

我们都在路上。。。。。
2012-06-06 12:28
missu_1314
Rank: 2
等 级:论坛游民
帖 子:46
专家分:98
注 册:2010-9-8
收藏
得分:0 
void DeleteNode(PLINK  pHead)
{
   PLINK pFirst, p, q, pOld;
   pFirst = p = q = pOld = pHead->pNext;

   if ( pHead->pNext == NULL)
   {
       printf("链表没有元素!");
       return;
   }

   while (NULL != p)
   {
       if (p->data > 100)
       {
           if (pFirst == p)               //删除的节点是 第一个节点
           {
               pHead->pNext = p->pNext;
               p = pOld;
               free(q);
               
           }
           else                     //删除的节点不是 第一个
           {
               pOld->pNext = p->pNext;
               p = pOld;
               free(q);
              
           }
       }

       pOld = p;
       p = p->pNext;
       q = p;
   }
   
       if (NULL == p)                //如果比较之后, p到了表尾,那么就是说中间没有记录
        {
            printf("没有记录!\n");
            return;
        }

    return;
}


建议拿个纸 画一画  节点的移动  和删除!!!
用了  typedef  ,, PLINK 等价于  struct Link *




[ 本帖最后由 missu_1314 于 2012-6-6 12:52 编辑 ]
2012-06-06 12:50
wuzi2010ED
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-6
收藏
得分:0 
回复 5楼 missu_1314
谢谢!我有一个疑问,为什么要把head改成pHead->next?if语句中的条件NULL==head和NULL==pHead->next有什么区别?是不是这两者相差了一个节点?
2012-06-06 14:46
missu_1314
Rank: 2
等 级:论坛游民
帖 子:46
专家分:98
注 册:2010-9-8
收藏
得分:0 
等于 head  的话  , 那什么时候  p 为空?  那判断条件就不能是NULL != p 啦  就得改成 NULL != p->next ,
至于怎么设置 你在纸上划一划, 应该就清楚
2012-06-06 15:24
快速回复:请大家帮忙看看这个函数错在哪里
数据加载中...
 
   



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

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