工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流!
爱好跑步,打篮球,睡觉。
欢迎加我QQ1500836631(备注CSDN),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。
文章目录
-
- 1.双向链表的定义
- 2.双向链表的创建
- 3.双向链表的插入
- 4.双向链表的删除
- 5.双向链表更改节点数据
- 6.双向链表的查找
- 7.双向链表的打印
- 8.测试函数及结果
1.双向链表的定义
上一节学习了单向链表单链表详解。今天学习双链表。学习之前先对单向链表和双向链表做个回顾。
单向链表特点:
??1.我们可以轻松的到达下一个节点, 但是回到前一个节点是很难的.
??2.只能从头遍历到尾或者从尾遍历到头(一般从头到尾)
双向链表特点
??1.每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 实现起来要困难一些
??2.相对于单向链表, 必然占用内存空间更大一些.
??3.既可以从头遍历到尾, 又可以从尾遍历到头
双向链表的定义:
??双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。下图为双向链表的结构图。
2.添加至表的中间位置
??同单链表添加数据类似,双向链表中间位置添加数据需要经过以下 2 个步骤,如下图所示:
??新节点先与其直接后继节点建立双层逻辑关系;
??新节点的直接前驱节点与之建立双层逻辑关系;
4.双向链表的删除
??双链表删除结点时,只需遍历链表找到要删除的结点,然后将该节点从表中摘除即可。
??例如,删除元素 2 的操作过程如图 所示:

Node * DeleteList(Node * head,int data){ Node * temp=head; /*遍历链表*/ while (temp) {/*判断当前结点中数据域和data是否相等,若相等,摘除该结点*/if (temp->data==data) { /*判断是否是头结点*/ if(temp->pre == NULL) { head=temp->next; temp->next = NULL声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!