42

问答题 42 /49

实现在双向链表中删除一个节点P和在节点P后插入一个节点,写出这两个函数。

参考答案

template <typename ElemType>
typedef struct DulNode
{
    struct DulNode *prior;               //前驱指针
    ElemType data;                     //数据
    struct DulNode *next;             //后继指针
} DulNode, *DuLinkList;
//----------------删除操作-----------------------------
Status ListDelete_DuL(DuLinkList &L, int i, ElemType &e)
{
    if (!(p = GetElemP_DuL(L, i)))
        return ERROR;
    e = p->data;
    p->prior->next = p->next;
    p->next->prior = p->prior;
    free(p);
    return OK;
}
//-----------------------插入操作---------------------
Status ListInsert_DuL(DuLinkList &L, int i, ElemType &e)
{
    if (!(p = GetElemP_DuL(L, i)))
        return ERROR;
    DuLinkList *s;
    if (!(s = (DuLinkList)malloc(sizeof(DuLNode))))
        return ERROR;
    s->data = e;
    s->prior = p->prior;
    p->prior->next = s;
    s->next = p;
    p->prior = s;
    return OK;
}