CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

一道面试题

楼主2004csharp()2005-12-08 15:59:57 在 C/C++ / C语言 提问

一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?  
  当时我没答出来,后来问考官,它告诉我正解,大家下讨论一下。 问题点数:20、回复次数:30Top

1 楼XINYONGHUCSDN(柯风)回复于 2005-12-08 16:16:37 得分 0

将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。Top

2 楼XINYONGHUCSDN(柯风)回复于 2005-12-08 16:17:30 得分 0

当然,其间要讲next->next暂存起来,呵呵!Top

3 楼cunsh(村少)回复于 2005-12-08 16:40:12 得分 0

楼长好主义.  
  mark  
  Top

4 楼lcd5(lcd5)回复于 2005-12-08 16:50:02 得分 0

设ListNode   *p   指向链表某一节点  
       
    p->data   =   p->next->data;  
    ListNode   *t   =   p->next;  
    p->next   =   p->next->next;  
    delete   t;Top

5 楼iamcaicainiao(老菜,长征)回复于 2005-12-08 17:00:53 得分 0

牵强Top

6 楼feiqing8088(雨儿)回复于 2005-12-08 17:16:10 得分 0

又是慧通的吧Top

7 楼sanhill()回复于 2005-12-08 17:42:03 得分 0

的确是牵强的做法!Top

8 楼cunsh(村少)回复于 2005-12-08 17:46:08 得分 0

得不到它前面的节点.当然这里不可能把这个节点真正的删掉了.  
  呵呵.Top

9 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-12-08 18:42:58 得分 0

题目有问题啊  
  如果是单循环链表就没有问题了  
   
  typedef   struct   linknode  
  {  
          int   data;  
          struct   linknode   *next;  
  }node;  
           
   
  void   del(node   *p)  
  {  
          node   *q;  
          q=p;  
          while(q->next!=p)  
          {  
                  q=q->next;  
          }  
     
          q->next=p->next;  
          free(p);  
  }  
  //当然还有很多细节没有考虑  
  大概思路就是这样  
   
   
  Top

10 楼2004csharp()回复于 2005-12-08 19:31:00 得分 0

面试官给的就是   XINYONGHUCSDN(柯风)   的答案Top

11 楼qiaoxiaonan(笑声爽朗)回复于 2005-12-08 20:08:35 得分 0

void   del(node   *p)  
  {  
          node   *q;  
          q=p;  
          while(q->next!=p)  
          {  
                  q=q->next;  
          }  
     
          q->next=p->next;  
          free(p);  
  }Top

12 楼programking(沧海一声笑)回复于 2005-12-08 20:31:41 得分 0

经典Top

13 楼speeches()回复于 2005-12-08 21:03:51 得分 0

编码的小技巧,Top

14 楼blooney(野比)回复于 2005-12-09 09:40:56 得分 0

XINYONGHUCSDN(柯风)  
  就是正确的嘛,怎么会说牵强呢?  
   
  呵呵,似乎很多人没发现问题的关键似的:)Top

15 楼qimans(逍遥游)回复于 2005-12-09 10:50:35 得分 0

XINYONGHUCSDN(柯风)  
  的答案还有问题,如果要删除的节点是最后一个节点呢?  
  所以要加以判断,如果p->next==NULL;则直接删除即可,不能访问p->next->next,否则出错Top

16 楼XINYONGHUCSDN(柯风)回复于 2005-12-09 12:03:49 得分 0

同意   qimans(逍遥游)    
  判断是要的,呵呵!这是在编程细节上考虑。  
   
  描述算法的时候只要大体描述清楚就行了!呵呵!  
   
   
  Top

17 楼dxabdepl()回复于 2005-12-09 12:40:25 得分 0

XINYONGHUCSDN(柯风)的答案真是经典啊  
  小弟自愧不如啊。。。。Top

18 楼lance_123(好好向CSDN的朋友学习!!)回复于 2005-12-09 12:53:30 得分 0

学习...Top

19 楼PHizingHelen(PHizing)回复于 2005-12-09 13:25:01 得分 0

这是数据结构的基础啦Top

20 楼qiang81020(午夜阳光)回复于 2005-12-09 13:36:49 得分 0

自己想了一下,如下:  
  假设X,Y,Z为连续三个节点。  
  则:  
  Y=P;  
  Y=X->NEXT;  
  Z=Y->NEXT=X->NEXT->NEXT;  
   
  然后:  
  让X->NEXT=Z  
  既:X->NEXT=X->NEXT->NEXT     P=P->NEXT  
  删除Y节点  
   
  不知道对不对Top

21 楼qiang81020(午夜阳光)回复于 2005-12-09 13:51:24 得分 0

总感觉有什么地方不对~还望高手指点~~Top

22 楼valetine(鸣人)回复于 2005-12-09 13:54:56 得分 0

学习。。。。。。。。。。。。。  
  Top

23 楼codearts(代码艺术)回复于 2005-12-09 19:53:01 得分 0

假如有3个结点,1,2,3,现在p指向第3个结点(即指最后一个结点),这个时候想必没有前面的结点就不能删除了吧?  
   
  Top

24 楼codearts(代码艺术)回复于 2005-12-09 19:55:04 得分 0

假如p指向末结点,q为p的前结点  
  q->next   =   p->next;   //q->next   =   NULL;  
  free(p);  
   
  没有q,又怎么能将q->next置为NULL呢?  
  Top

25 楼wangmao4585()回复于 2005-12-09 20:18:53 得分 0

果然菜Top

26 楼derekchuang(同舟共济)回复于 2005-12-18 12:03:27 得分 0

长见识了!!!Top

27 楼Mr_Yang(初级程序员)回复于 2005-12-18 16:22:04 得分 0

学习。Top

28 楼Duwchy(+U)回复于 2005-12-18 17:06:31 得分 0

呵呵,很经典的问题,以前听过,也想过;解决方法很巧妙,按照题目的要求,应该是最后的解决方法。。Top

29 楼Duwchy(+U)回复于 2005-12-18 17:07:21 得分 0

打错了,应该是“最后的解决方法”Top

30 楼langzi520(虽左但右)回复于 2005-12-18 17:30:06 得分 0

*p   指向链表某一节点  
      ListNode   *t  
    p->data   =   p->next->data;  
    t=   p;  
    p->next   =   p->next->next;  
    free(t);  
   
  Top

相关问题

  • 一道面试题
  • 一道面试题????
  • MICROSOFT 面试题一道
  • 一道面试题
  • 一道面试题!
  • 一道面试题
  • 一道面试题
  • 一道面试题
  • 一道面试题
  • 一道面试题

关键词

  • 节点
  • 结点
  • 指针
  • 学习
  • 解决
  • next
  • 指向
  • xinyonghucsdn
  • 删除
  • 链表

得分解答快速导航

  • 帖主:2004csharp

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo