推荐阅读:
---------------------------------------------------------------------------------------------------------------------------------
目录
双向链表
定义如下:
typedef struct DuLNode{
Elemtype data;
struct DuLNode *prior, *next;
}DuLNode, *DuLinkList;
双向循环链表
- 头结点的前驱指针指向链表的最后一个结点
- 最后一个结点的后继指针指向头结点
对称性
//下图
p->prior->next = p = p->next->prior;
插入、删除操作时间复杂度:O(n);
双向链表的插入
//在第i个位置前插入元素e
void ListInsert_DuL(DuLinkList &L, int i, ElemType e)
{
DuLinkList p = NULL;
if(!(p=GetElemP_Dul(L,i))) //找到第i个位置,并判断是否合法
return ERROR;
s = new DuLNode;
s->data = e;
//插入
s->prior = p->prior;
p->prior->next = s;
s->next = p;
p->prior = s;
return OK;
}
双向链表的删除
//删除第i个位置元素,并用e返回
void ListInsert_DuL(DuLinkList &L, int i, ElemType &e)
{
DuLinkList p = NULL;
if(!(p=GetElemP_Dul(L,i))) //找到第i个位置,并判断是否合法
return ERROR;
e = p->data;
//删除
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
return OK;
}
视频:戳这里_B站大学