CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

删除双链表的一个结点?

楼主csutzs(国士无双)2006-03-30 09:52:32 在 C/C++ / C语言 提问

写一个函数   删除一个双链表的一个结点    
  问题点数:50、回复次数:7Top

1 楼vanlover(龙龙)回复于 2006-03-30 09:55:40 得分 0

小测验?Top

2 楼iamcaicainiao(老菜,长征)回复于 2006-03-30 10:05:13 得分 0

作业贴,建议直接用baidu或者google搜一下。Top

3 楼yinqing_yx(淘汰引擎)(玩虚一族)回复于 2006-03-30 10:49:28 得分 5

 
  predelNode->backPtr   =   delNode->backPtr;  
  delNode->backPtr->frontPtr=predeNode;  
  delete   deNode;  
  deNode   =   0;Top

4 楼michael_g_hu(一代风云)回复于 2006-03-30 10:53:19 得分 5

做一个循环,每次保存上一个结点地址,当前结点满足删除条件时,把上个结点的右边指向下个结点,下个结点左边指向上个结点,最后FREE掉就行了Top

5 楼ricky460(阿酷)回复于 2006-03-30 11:25:08 得分 10

//假设链表节点类似如下定义  
  struct   NODE  
  {  
        NODE*   last   ;  
        NODE*   next   ;  
        ..........   //其它代码  
  };  
   
  //删除函数  
  void   DelNode(NODE*&   pDel)  
  {  
  NODE*   pLast   =   pDel->last   ;  
  NODE*   pNext   =   pDel->next   ;  
   
  pLast->next   =   pNext   ;  
  pNext->last   =   pLast   ;  
   
  delete   pDel;  
  }Top

6 楼du51(郁郁思扬)回复于 2006-03-30 11:48:59 得分 30

#include<stdio.h>  
  #include<stdlib.h>  
  typedef   struct   NodeTag{  
          int   val;  
          struct   NodeTag   *pre,*next;  
  }Node,*Link;        
  Link   createNode(int   val)  
  {  
          Link   link=(Link)malloc(sizeof(Node));  
          if(!link)exit(1);  
          link->val=val;  
          link->pre=link->next=NULL;  
          return   link;  
  }  
  void   insertNode(Link   *head,int   val)  
  {  
          Link   p=*head,q;  
          Link   newNode=createNode(val);  
          if(!*head)*head=newNode;  
          else  
          {  
                  while(p)q=p,p=p->next;  
                  q->next=newNode;  
                  newNode->pre=q;  
          }  
  }  
  void   createLink(Link   *head)  
  {  
          int   val;  
          printf("请输入数据以-1结束\n");  
          scanf("%d",&val);  
          while(val+1)  
          {  
                  insertNode(head,val);  
                  scanf("%d",&val);  
          }  
  }  
  void   showLink(Link   head)  
  {  
          while(head)  
          {  
                  printf("%d     ",head->val);  
                  head=head->next;  
          }  
          printf("\n");  
  }  
  void   RshowLink(Link   head)                  
  {  
          Link   p=head;  
          if(!p)return;  
          while(p->next)p=p->next;  
          while(p)  
          {  
                  printf("%d     ",p->val);  
                  p=p->pre;  
          }  
          printf("\n");  
  }    
  void   delNode(Link   *head,int   val)  
  {  
          Link   p=*head,q;  
          if(!p)return;  
          while(p)  
          {  
                  if(p->val==val)  
                  {  
                          if(p==*head)  
                          {  
                                  *head=(*head)->next;  
                                  if(*head)(*head)->pre=NULL;  
                                  free(p);  
                                  p=*head;  
                          }  
                          else  
                          {  
                                  q=p->pre;  
                                  if(p->next)p->next->pre=q;  
                                  q->next=p->next;  
                                  free(p);  
                                  p=q->next;  
                          }  
                  }  
                  else   p=p->next;  
          }  
  }    
  void   KdelNode(Link   *head)  
  {  
          int   val;  
          printf("请输入你要删除的值.\n");  
          scanf("%d",&val);  
          delNode(head,val);  
  }          
  void   destroyLink(Link   *head)                
  {  
          Link   p;  
          while(*head)  
          {  
                  p=*head;  
                  *head=(*head)->next;  
                  free(p);  
          }  
  }  
  int   main()  
  {  
          Link   head=NULL;  
          createLink(&head);  
          showLink(head);  
          RshowLink(head);  
          KdelNode(&head);  
          showLink(head);  
          RshowLink(head);  
          destroyLink(&head);  
          system("PAUSE");  
          return   0;  
  }Top

7 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-30 14:18:59 得分 0

//链表节点定义  
  struct   NODE  
  {  
        ...  
        NODE   *last,   *next   ;  
        ...   //其它代码  
  };  
   
  //删除节点pDel  
   
  void   DelNode(NODE   *del)  
  {  
  (del->last)->next   =   del->next;  
                    (del->next)->last   =   del->last;  
   
  delete   del;  
  }Top

相关问题

  • 在单链表中删除结点问题。
  • 链表删除后,删除的结点占用的内存如何释放?
  • 小弟问个建立动态链表和删除链表结点的问题!!!!
  • 请前辈帮忙找错,字符单链表中删除结点时出错.
  • 大哥大姐们帮帮忙!!!free()函数的疑惑,从单链表中删除结点时报错.
  • 链表删除结点的问题:大伙帮我看看这个程序小问题。
  • 关于链表删除结点的一点问题!!麻烦大家帮忙看看!·#¥%*—……%¥#···!!!!!
  • 删除链首的结点时,为何出错?
  • CList结点删除问题
  • 怎样取得链表的头结点?

关键词

  • 结点
  • val
  • pdel
  • 删除
  • delnode
  • backptr
  • head
  • link
  • plast
  • newnode

得分解答快速导航

  • 帖主:csutzs
  • yinqing_yx
  • michael_g_hu
  • ricky460
  • du51

相关链接

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

广告也精彩

反馈

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