如何实现双向链表的插入、删除操作
2017-08-20 11:07
579 查看
如何实现双向链表的插入、删除操作
循环单链表的出现,虽然能够实现从任一结点出发沿着链能找到其前驱结点,但是时间复杂度为O(N)。如果希望能从链表中快速确定某一个结点的前驱,另一个解决方法就是在单链表的每一个结点再增加一个指向其前驱的指针ptr。这样形成的链表中就有两条方向不同的链,被称为双向链表(DoubleLink List),简称双链表。它是由头指针head唯一确定的。带头结点的双链表的某些运算变得方便。将头结点和尾结点链接起来,为双循环链表。
带头结点的双链表结构如下图所示:
双链表的形式描述:
Typedef struct dlistnode
{
DataType data;
struct dlistnode *prior,*next;
}DListNode;
typedef DListNode *DLinkList;
DLinkList head;
由于双链表的对称性,在双链表中能方便地完成各种插入、删除操作。
在双向链表的结点p之后插入一个新的结点s:
void DInsert()
{
//假设p!= NULL
DListNode *s = malloc(sizeof(DListNode));
s->next = p->next;
s->prior = p;
p->next = s;
s->next->prior = s;
}
双链表上删除结点p的后一个结点q的操作为:
void DDeleteNode()
{
q= p->next;
p->next= q->next;
q->next->prior= p;
free(q);
}
相关文章推荐
- 如何使用c语言实现双向链表的插入删除操作
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- [原]C语言实现双向链表删除节点、插入节点、双向输出等操作
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
- C语言---双向链表的插入、删除、查找操作
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- 链表(单双链表)用法与基本操作(构建、查找、插入、删除)实现
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作