当前位置: 首页 > news >正文

双链表插入 删除详解

节点结构:

 

[cpp]  view plain  copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. struct both_node  
  2. {  
  3.     int key;  
  4.     struct both_node *prev;  
  5.     struct both_node *next;  
  6.     both_node(int k)  
  7.         :key(k),prev(NULL),next(NULL)  
  8.     {}  
  9. };  



 

不带头节点的双链表实现插入 删除,

 

[cpp]  view plain  copy
 
 print?在CODE上查看代码片派生到我的代码片
    1. 双链表  
    2. //插入  
    3. void insert_both(both_node *&head,int key)  
    4. {  
    5.      if(head==NULL)  
    6.     {  
    7.          head= new both_node(key);  
    8.     } else  
    9.     {  
    10.          both_node *tmp= new both_node(key);  
    11.           if(head->next==NULL)//当插入时链表中只有一个节点的时候  
    12.          {  
    13.              head->next=tmp;  
    14.              tmp->prev=head;  
    15.          } else //链表中已经至少有两个节点  
    16.          {  
    17.              tmp->next=head->next;  
    18.              head->next->prev=tmp;  
    19.   
    20.              head->next=tmp;  
    21.              tmp->prev=head;  
    22.          }  
    23.     }  
    24. }  
    25. //删除  
    26. bool remove_both(both_node *&head,int key)  
    27. {  
    28.      if(head==NULL)  
    29.           return false ;  
    30.      if(head->key==key)//如果是头节点  
    31.     {  
    32.           if(head->next==NULL)//如果只有一个节点  
    33.          {  
    34.               delete head;  
    35.              head=NULL;  
    36.          } else//链表后面还有节点  
    37.          {  
    38.              both_node *tmp=head;  
    39.              head=head->next;  
    40.              head->prev=NULL;  
    41.               delete tmp;  
    42.              tmp=NULL;  
    43.          }  
    44.           return true ;  
    45.     }  
    46.     both_node *cur=head->next;  
    47.      while(cur !=NULL && cur->key !=key)  
    48.          cur=cur->next;  
    49.      if(cur==NULL)//没有找到  
    50.           return false ;  
    51.      if(cur->next !=NULL)//删除的不是尾节点  
    52.     {  
    53.          cur->prev->next=cur->next;  
    54.          cur->next->prev=cur->prev;  
    55.     } else //删除的是尾节点  
    56.     {  
    57.          cur->prev->next=NULL;  
    58.     }  
    59.       
    60.      delete cur;  
    61.     cur=NULL;  
    62.      return true ;  
    63. }

转载于:https://www.cnblogs.com/Ph-one/p/6367522.html

相关文章:

  • 存储数据的大小端模式
  • ppp点对点协议
  • MPEG2、MPEG4、H264的差异
  • 可以参考的几个英文论坛
  • 强烈推荐的一个博客 图灵官方博客
  • H264 介绍[1]
  • H264 层次构成[2]
  • H264编码技术[3]
  • H264--1--编码原理以及I帧B帧P帧[4]
  • H264--2--语法及结构[5]
  • H264--3--NAL层的处理[6]
  • H264--4--H264编码[7]
  • H264--5--H264解码[8]
  • 静态编译与动态编译的区别
  • Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析
  • [译]前端离线指南(上)
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • co模块的前端实现
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • extract-text-webpack-plugin用法
  • Java 网络编程(2):UDP 的使用
  • Java读取Properties文件的六种方法
  • Laravel5.4 Queues队列学习
  • mongo索引构建
  • vue-cli3搭建项目
  • vue数据传递--我有特殊的实现技巧
  • 读懂package.json -- 依赖管理
  • 前端临床手札——文件上传
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • Semaphore
  • ​人工智能书单(数学基础篇)
  • #NOIP 2014#Day.2 T3 解方程
  • #pragma multi_compile #pragma shader_feature
  • #宝哥教你#查看jquery绑定的事件函数
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $.ajax,axios,fetch三种ajax请求的区别
  • (1)(1.11) SiK Radio v2(一)
  • (42)STM32——LCD显示屏实验笔记
  • (a /b)*c的值
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (力扣题库)跳跃游戏II(c++)
  • (十) 初识 Docker file
  • (一)基于IDEA的JAVA基础10
  • (转载)(官方)UE4--图像编程----着色器开发
  • *1 计算机基础和操作系统基础及几大协议
  • . Flume面试题
  • .form文件_SSM框架文件上传篇
  • .gitignore文件设置了忽略但不生效
  • .NET 设计模式初探
  • .NET/C# 的字符串暂存池
  • .NET4.0并行计算技术基础(1)