免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1737 | 回复: 2
打印 上一主题 下一主题

两种删除单链表结点的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-29 16:18 |只看该作者 |倒序浏览

  1. 链表结点的结构:
  2. typedef struct LNode{
  3.     ElemType     data;
  4.     struct LNode    *nexe;
  5. }LNode, *PLNODE;

  6. 第一种方法(通常使用该方法):
  7. typedef struct LNode{
  8.     ElemType     data;
  9.     struct LNode    *next;
  10. }LNode, *PLNODE;

  11. void ListDelete(PLNODE &Header, ElemType e){
  12.     PLNODE    p, q;

  13.     if (Header ==NULL)
  14.     {
  15.         return;
  16.     }

  17.     if (Header->;data == e)
  18.     {
  19.         p = Header;
  20.         Header = p->;next;
  21.         free(p);
  22.     }

  23.     q = Header;
  24.     while (q != NULL)
  25.     {
  26.         p = q->;next;

  27.         if (p->;data == e)
  28.         {
  29.             q->;next = p->;next;
  30.             free(p);
  31.         }
  32.         else
  33.         {
  34.             q = p;
  35.         }
  36.     }
  37. }

  38. 第二种方法(容易使人糊涂):
  39. void ListDelete(PLNODE &Header, ElemType e){
  40.     PLNODE    *p;
  41.     PLNODE    q;

  42.     p = &Header;
  43.     while (*p)
  44.     {
  45.         if (*p == NULL)
  46.         {
  47.             return;
  48.         }

  49.         if ((*p)->;data == e)
  50.         {
  51.             q = *p;
  52.             *p = (*p)->;next;
  53.             free(q);
  54.         }
  55.         else
  56.             p = &(*p)->;next;
  57.     }
  58. }
复制代码


第二种方法较第一种方法有两个优点(暂时只知道这个):
1、不需要特别的考虑头指针的问题;
2、不需要同时移动两个指针,只移动一个就够了。

论坛徽章:
0
2 [报告]
发表于 2005-06-30 18:32 |只看该作者

两种删除单链表结点的方法

不知道各位有没有不同的想法?

论坛徽章:
0
3 [报告]
发表于 2005-07-01 09:34 |只看该作者

两种删除单链表结点的方法

第二种执行效率高
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP