对于单链表或循环链表,从表头结点开始扫描,可以遍历到链表中的每个结点,而循环链表可以从任何结点出发对各个结点进行遍历。但它们都有一个共同的缺陷,就是无法快速地访问结点的前驱。例如,为了删除结点p,必须首先找到p的前驱结点,这需要从表头开始查找链表,直到某个结点q的后继等于p,q即p的前驱,显然,这是极不方便的。
为了支持双向快速访问结点,引入了双向链表的概念。在双向链表中,每个结点含有两个指针域和一个数据域。
通过两个指针域,多个双链结点可构成两个循环链,建立了一种灵活、有效的动态表结构,称为双向循环链表,简称双链表。
在双链表中插入一个结点时,涉及插入点前一结点的next指针、插入点后一结点的prev指针以及被插入结点的两个指针的修改。
从双链表中删除一个结点的过程,只需修改前一结点的next指针和后一结点的prev指针即可。