| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 524 人关注过本帖
标题:链表的删除,我自己做的,不知是否有问题,求教!
只看楼主 加入收藏
梦幻尘
Rank: 2
等 级:论坛游民
帖 子:33
专家分:34
注 册:2012-8-26
结帖率:87.5%
收藏
已结贴  问题点数:30 回复次数:9 
链表的删除,我自己做的,不知是否有问题,求教!
struct student *c_port(struct student *head,long num)
{
  struct student *p1,*p2;
  p1=head;
  p2=head;
   do
     {if(p1->num=num)&&(p1==head)  head=p1->next;\*判断首结点是否符合*\
      else
       { p2=p1;
        p1=p1->next;
        if(p1->num==num)
          p2->next=p1->next;
        }
      }while((p1->next!=NULL)&&(p1->num!=num) \*判断直到尾结点是否符合*\
   if(p1->next==NULL) printf("找不到");
    }
  
   
  return(head);
解释:
\* #define NULL 0
 struct student
 [long num;
  struct student *next;
 }
搜索更多相关主题的帖子: return next 
2012-08-28 19:46
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:5 
void _delete(NODE *head, long data)
{   
    NODE *p =NULL;
    while( head->next )
    {
        p = head;
        head = head->next;
        if( data == head->data )
        {
            p->next = head->next;
            free(head);
            return;
        }
    }
    printf("%d outwith the link!\n", data);   
}
有头链表,自己对比下,我也随便写的NODE 相当于你的机构体啊

[ 本帖最后由 遗矢的老人 于 2012-8-28 21:01 编辑 ]
2012-08-28 20:43
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:0 
你把写的全部链表发上来看看
2012-08-28 20:53
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
收藏
得分:25 
楼主,对你的代码进行了一些修改,你看看!

struct student *c_port(struct student *head,long num){
   struct student *p1,*p2;
   if(head->num=num){          判断首结点,不需在循环中
      p2=head;
      head=head->next;\*判断首结点是否符合*\  
      free(p2);    \*释放空间*\
   }
   else{
      p1=head;
      do{
         if(p1->next->num==num){
            p2=p1->next;
            p1->next=p2->next;
            free(p2);
            break;
         }
      }while((p1->next!=NULL) \*判断直到尾结点是否符合*\  判断p1后面还有没有结点
      if(p1->next==NULL) printf("找不到");    一般在函数中不做屏幕输出
   }  
   return(head);
}

做自己喜欢的事!
2012-08-28 21:22
梦幻尘
Rank: 2
等 级:论坛游民
帖 子:33
专家分:34
注 册:2012-8-26
收藏
得分:0 
回复 4楼 netlin
do{
         if(p1->num==num){
            p2=p1->next;
            p1->next=p2->next;
            free(p2);
            break;
         }
      }while((p1->next!=NULL) \*判断直到尾结点是否符合*\  判断p1后面还有没有结点。
 你好,如果if判断条件不成立,怎么办?
 还想问一下我的程序是否错了,请指出?
谢谢!
2012-08-28 21:53
梦幻尘
Rank: 2
等 级:论坛游民
帖 子:33
专家分:34
注 册:2012-8-26
收藏
得分:0 
回复 4楼 netlin
答案我有,我就是想问一问思路的对错,如果错了,照我的思路应该怎样编。
2012-08-28 22:03
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
收藏
得分:0 
以下是引用梦幻尘在2012-8-28 21:53:19的发言:

do{
         if(p1->num==num){
            p2=p1->next;
            p1->next=p2->next;
            free(p2);
            break;
         }
      }while((p1->next!=NULL) \*判断直到尾结点是否符合*\  判断p1后面还有没有结点。
 你好,如果if判断条件不成立,怎么办?
 还想问一下我的程序是否错了,请指出?
谢谢!
哦,是哦,漏了一句往下走的语句!
do{
         if(p1->next->num==num){
            p2=p1->next;
            p1->next=p2->next;
            free(p2);
            break;
         }
         p1=p1->next;
}while((p1->next!=NULL)


[ 本帖最后由 netlin 于 2012-8-29 08:52 编辑 ]

做自己喜欢的事!
2012-08-29 08:31
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
收藏
得分:0 
以下是引用梦幻尘在2012-8-28 22:03:15的发言:

答案我有,我就是想问一问思路的对错,如果错了,照我的思路应该怎样编。
思路没有错。大家只是在思路的效率上进行一些探讨。
你的思路:
首先进入循环,在循环中,每一个结点,都判断它是不是头结点,
如果不是头结点,再判断它的值,
如果找到了要删除的结点,则进行删除操作,
在是否继续循环时,第一要判断是否到了最后的结点,第二,还要判断当前结点的值
你的思路中,值得商榷的地方:
1.是否是头结点,不用在循环中每次都判断
2.在判断是否继续循环时,不用增加判断当前结点的值(在循环中找到值,处理完删除后就可以直接退出循环)
这两个地方,每次循环都要做,在效率上就不高了!


[ 本帖最后由 netlin 于 2012-8-29 08:54 编辑 ]

做自己喜欢的事!
2012-08-29 08:49
梦幻尘
Rank: 2
等 级:论坛游民
帖 子:33
专家分:34
注 册:2012-8-26
收藏
得分:0 
回复 8楼 netlin
谢谢!那天刚学链表,花了好久才看懂,现在才发现好多不明了。
2012-08-29 21:16
梦幻尘
Rank: 2
等 级:论坛游民
帖 子:33
专家分:34
注 册:2012-8-26
收藏
得分:0 
回复 2楼 遗矢的老人
前辈,如果p和head一直往下移,你哪头指针好像没了勒!
2012-08-29 21:33
快速回复:链表的删除,我自己做的,不知是否有问题,求教!
数据加载中...
 
   



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

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