·什么是带头结点的双向循环链表
我们直接给出带头结点的双向循环链表的图示:
那么有无头结点的区别是什么呢?
头节点是为了操作的统一、方便而设立的,一般来说,头节点放在第一元素节点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度、用做监视哨等)。有头节点后,对在第一元素节点前插入节点和删除第一节点,其操作与对其他节点的操作统一了。而且无论链表是否为空,头指针均不为空。
第二个问题,双向循环链表相比较于单链表有哪些不同?
单向链表和双向链表的区别在于:单向链表中,每个节点只有一个指向下一个节点的指针,而双向链表则有两个指针,分别指向上一个和下一个节点。进一步的如果是一个循环链表,那么就不存在NULL,可以直接通过最后一个节点访问到头结点。
·代码及其实现
·Dlist.h
#include <stdio.h>
#include <assert.h>
typedef int DataType;
typedef struct DListNode
{
struct DListNode* pNext;
struct DListNode* pPre;
DataType Data;
}DListNode,*pDListNode;
// 初始化
void DListInit(pDListNode* pHead);
void PrintDList(pDListNode pHead);