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

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

算法分析代码实现

算法分析

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

  • 遍历找到尾部节点;
  • 断开如图两处连接;
  • 当前节点的前一节点指向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}
posted @ 2019-01-10 21:52  天星小苑  阅读(1463)  评论(0编辑  收藏  举报