回顾单链表的构造过程,是将一个或者多个结点通过指针链接起来,构成一条链状的结构,它可以很好的表示逻辑上“一对一”的关系。
但在单链表中,只能从头向后遍历查找元素,不能从后向前查找。既然每个结点是通过指针链接查找下一个结点,那么为什么不能给每个结点多加一个指针,让它可以向前查找呢?
仍然以两个多项式求和为例,抽取操作对象:系数和指数,作为二元组。所有的二元组构成一个线性表,每个二元组作为一个结点。
与单链表不同的是,现在每个结点增加一个指针域,让后一个结点的指针指向前一个结点,前一个结点的指针指向后一个结点,这就构成了双向链表。
从双向链表的结构上看,每个结点其实没有很大变化,只是增加了一个指针域,使得可以从两个方向遍历链表。其他方面的特性与单链表类似,也常添加头结点。
还是需要提醒读者,指针域只是用于存储下一个结点或者前一个结点的地址,计算机并不知道操作什么结构(只能通过地址运算查找下一个结点),示意图上的箭头,只是为了方便读者理解双向链表的结构,实际上并不存在。