双链表的插入,删除以及遍历

简介: 双链表的插入,删除以及遍历

1.双链表的初始化

typedef int ElemType;
typedef struct DLinkList{
    ElemType data;
    struct DNode *prior,*next;
   
}DNode,*DLinkList;
bool InitDLinkList(DLinkList &L)
{
    L=(DNode*)malloc(sizeof(DNode));
    if(L=NULL)
    {
        return false;
    }
    L->prior=NULL;
    L->next=NULL;
    return true;
}
void testDLinkList()
{
    DLinkList L;
    InitLinkList(L);
   
}
//判断双链表是否为空
bool Empty(DLinkList L)
{
    if(L->next==NULL)
        return true;
    else
        return false;
   
}


2.双链表的插入

//在p结点之后插入s结点
bool InsertNextNode(DNode *p,DNode *s)
{
    if(p==NULL || s==NULL)
        return false;
    s->next=p->next;//将结点*s插入到结点*p之后
    if(p->next!=NULL)
        p->next->prior=s;
    s->prior=p;
    p->next=s;
    return true;
}


3.双链表的删除

bool DeleteNextDNode(DNode *p)
{
    if(p==NULL)
       return false;
    DNode *q=p->next;
    if(q==NULL)
        return false;
    p->next=q->next;
    if(q->next!=NULL)
        q->next->prior=p;
    free(q);
    return true;
}
void DestroyList(DLinkList &L)
{
//释放各数据结点
    while(L->next!=NULL)
        DeleteNextNode(L);
    free(L);//释放头结点
    L=NULL;//头指针指向NULL
}



4.遍历双链表

//后向遍历
while(p!=NULL)
{
    p=p->next;
}
while(p!=NULL)
{
    p=p->prior;
}
//前向遍历,跳过头结点
while(p->prior!=NULL)
{
    p=->prior;
}
时间复杂度O(n)
目录
相关文章
|
5月前
|
存储
链表的遍历方式
链表的遍历方式
|
6月前
|
存储 算法
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)
90 0
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)
链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
|
7月前
|
算法 Python Java
Java每日一练(20230429) 二叉树后序遍历、删除无效括号、合并有序链表
Java每日一练(20230429) 二叉树后序遍历、删除无效括号、合并有序链表
50 0
Java每日一练(20230429) 二叉树后序遍历、删除无效括号、合并有序链表
|
7月前
|
算法 Java C++
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
65 0
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
|
7月前
|
Go Java C++
Java每日一练(20230409) 多数元素、反转链表 II 、日期之间的遍历
Java每日一练(20230409) 多数元素、反转链表 II 、日期之间的遍历
61 0
Java每日一练(20230409) 多数元素、反转链表 II 、日期之间的遍历
|
C++
数据结构循环链表之循环链表遍历 | 第三套
数据结构循环链表之循环链表遍历 | 第三套
39 0
|
存储 C++
链表操作:插入、删除与遍历
(笔者画图不易呜呜)链表是一种基本的数据结构,它可以用来存储一系列的元素,并且支持灵活的插入、删除操作。在计算机科学中,链表常常用于构建更复杂的数据结构,如栈、队列以及图等。
345 0
双链表全部知识总结(初始化、插入、删除、遍历)
双链表知识总结包括思路分析、代码实现
278 0
|
Java
java数据结构20:Big Bang(链表的插入、删除、遍历和查找)
学习累了的时候看看一集二十分钟左右的《生活大爆炸》也不失为一种乐趣。在剧中Sheldon可以说是一个极品,真不知Leonard是如何忍受这位极品室友成天的唠叨。
100 0