双链表(二)

双链表的插入新节点与删除节点

关于插入新节点,双链表和单链表用到的方法一样,唯一不同的是双链表还需要将指向前一个数据节点的指针里面存放的地址按照逻辑进行交换

关于删除节点,单链表用到了两个指针,一个指针指向需要删除的某一个节点,另一个指针指向删除前面一个节点,才可以做到整个链表不会乱,双链表因为有一个指针是指向前面一个节点的,因此就不需要再重新声明一个指针。

插入节点:

void node_insert(node* head, int n)  //n用来指明在哪一个数据节点后面创建
{
    node *p,*q;  //p来指向节点,q用来创建新节点
    int l=0;
    p = head->next;
    while (p != NULL)
    {
        l++;
        if (l == n)  //找到位置后,实现创建插入
        {
            q = new node;
            cin >> q->a;
            q->next = p->next;  //指向下一个数据节点的地址交换后,还没有完
            p->next = q;
            if (q->next != NULL) 
                q->next->pre = q;  //还需要交换指向前面一个数据节点的地址
            q->pre = p;
            break;
        }
        p = p->next;
    }
}

删除节点:

void node_delete(node* head, int n)
{
    node *p;
    int l = 0;
    p = head->next;
    while (p != NULL)
    {
        l++;
        if (l == n)
        {
            p->pre->next = p->next;  //找到删除的前一个节点的next指针
            p->next->pre = p->pre;//找到删除的后一个节点的pre指针
            delete p;
            break;
        }
        p = p->next;
    }
}

猜你喜欢

转载自www.cnblogs.com/hzb1224/p/11407460.html