2.3.1 双链表的基本操作(王道考研)

本文详细介绍了双链表的基本操作,包括初始化、判断是否为空、插入、删除、销毁及遍历。初始化时,头节点的prior和next指针均设为NULL。插入操作需要注意新节点、前驱节点和后继节点的指针更新。删除操作则要处理被删除节点及其相邻节点的指针。遍历双链表时,可以从任意节点开始前后向遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.3.1 双链表的基本操作

1. 双链表的初始化

/**
 * 双链表的初始化
 * @param L
 * @return
 */
bool InitDLinkList(DLinkList &L){
    L = (DNode *) malloc(sizeof (DNode));
    if (L=NULL){
        return false;
    }
    L->prior = NULL;
    L->next = NULL;
    return true;
}

判断双链表是否为空

/**
 * 判断双链表是否为空
 * @param L 
 * @return 
 */
bool isEmpty(DLinkList L){
    if (L->next == NULL){
        return true;
    } else{
        return false;
    }
}

双链表的插入操作

双链表的后插操作

/**
 * 关于双链表的后插操作
 * @param p
 * @param s
 * @return
 */
bool InsertNextDNode(DNode *p, DNode *s) {
    if (p == NULL || s == NULL) {
        return false;
    }
    s->next = p->next;
    if (p->next != NULL) {
        p->next = s->next;
    }
    s->prior = p;
    p->next = s;
    return true;
}

双链表的删除


/**
 * 删除双链表的p节点的后继节点
 * @param p
 * @return
 */
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;
}

销毁双链表,并释放各个数据节点


/**
 * 销毁数据
 * @param L
 */
void DestoryList(DLinkList &L){
    while (L->next != NULL){
        DeleteNextDNode(L);
    }
    free(L);
    L=NULL;
}

双链表的遍历


总结一下

  • 双链表
    • 初始化
      • 头节点的 prior, next 都指向 NULL
    • 插入(后插)
      • 注意新插入节点、前驱节点、后继节点的指针修改
      • 边界情况:新插入节点在最后一个位置需要特殊处理
    • 删除(后删)
      • 注意删除节点、前驱节点、后继节点的指针修改
      • 边界情况:如果删除的节点在最后一个位置需要特殊处理
    • 遍历
      • 从给定的一个节点开始,后向遍历、前向遍历–循环的终止条件
      • 链表不具备随机存储条件,查找操作只能通过顺序遍历实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jupyter Aaron

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值