(八)双链表算法之删除节点

(八)双链表算法之删除节点

算法分析代码实现

算法分析

  和单链表的删除一样,双链表的删除节点也是分为两步:找到要删除的节点;删除找到的节点。
如果删除的节点是尾节点

  • 遍历找到尾部节点;
  • 断开如图两处连接;
  • 当前节点的前一节点指向NULL;
  • 释放当前节点。
    如果删除的节点不是尾部节点
  • 遍历找到要删除的节点;
  • 依次断开如图所示连接;
  • 当前节点的前一节点的pNext指向下一节点;
  • 当前节点的下一节点的pPrev指向当前节点的前一节点;
  • 释放当前节点空间。

代码实现

 1int delete_node(struct node *pH,int data)
2{
3    struct node *p = pH;
4    if(p = NULL)
5        return -1;
6    while(NULL != p -> pNext)
7    {
8        p = p ->pNext;            //跳过头节点
9        if(p -> data == data)
10        {
11            if(NULL == p -> pNext)尾部节点
12            {
13                 p -> pPrev -> pNext = NULL;
14            }
15            else
16            {
17                p -> pPrev -> pNext = p -> pNext;
18                p -> pNext -> pPrev = p -> pPrev;
19            }
20        }
21        free(p);
22        return 0;
23    }
24    printf("未找到要删除的节点.\n");
25    return -1;
26}

转载于:https://www.cnblogs.com/ywx123/p/10252579.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值