目录
一.双向链表的定义与单链表的区别:
二.头指针的创建,双向链表的创建
1.头指针的创建:
2. 双向链表的创建:
三.双向链表的删除:
四.双向链表的摧毁:
五.双向链表的打印输出:
编辑
最后,完整的代码奉上,还有运行截图:
完整代码:
学习双向链表要有一些单链表的基础哦,如果还不会单链表的小伙伴可以看看我的这两篇博客~
单链表的创建,删除、增添节点,最后打印输出-CSDN博客
单链表之头插法与尾插法(最后栗子:单链表的反转)-CSDN博客
首先,我们先来看看双向链表的定义:
双向链表(double linked list)是在单链表的每个节点中,在设置一个指向其前驱节点的指针域.
图解如下:
与单链表的区别(这里我顺便为下面的创建进行声明):
相对于单链表,双向链表多了一个前驱指针域。在双向链表中的节点都有两个指针域,一个指向直接后继,另一个指向直接前继。
这一步相对简单,就不做过多说明了,注意assert断言是可以省略的,用assert断言时,要引入头文件include
注意,这里date是要创建节点的个数;在后面的main函数中有体现
双链表的头插法与尾插法与但链链表类似(根据下面的关键步骤画图理解下)
头插法关键步骤:1.addition->next=p->next;
2. p->next=addition;
3.addition->prior=p;
注意两个指针都要有指向,p->next==NULL不要写成p->next=NULL;注意等号与赋值符号的区别
尾插法关键步骤:1.addition->prior=p;
2.addition->next=p->next;
3.p->next->prior=addition;
4.p->next->prior=addition;
else外的p=p->next是让p持续指向下一个节点,方便节点的创建和打印,这里需要着重理解下
主要就s->prior->next=s->next和s->next->prior=s->prior 理解下,相当于单链表的删除,也就是跳过当前要删除的链表。
这步注意要有一个temp变量来保存当前节点,头结点指向下一个节点,最后temp和head都要释放内存.
这里为了更直观,我将前驱节点和后继 节点都打印了。其中打印前驱是注意是
p->prior->prior!=NULL;然后将最后一个前驱节点打印(不要遗落)。
运行截图:
博客到这里也是结束了,喜欢的小伙伴可以点赞加关注支持下博主,这对我真的很重要~~