I am doing some list excercise, and try to write a mergesort algorithm, but after I delete a node, which has been sorted in list, another two node also been deleted, I don't know why. And here is my code. I run the code below try to delete q, put it before p, but after I did this, the Predecessor and the successor has also being deleted.
insertBefore(p, L.remove((q = q->succ)->pred)); 
here is remove function:
 T  List<T>::remove(ListNodePosi(T)&p)//remove node
    {
        T e = p->data;
        p->pred->succ = p->succ;
        p->succ->pred = p->pred;
        delete p;
        _size--;
        return e;
    }
Here is insert Before:
ListNodePosi(T)  List<T>::insertBefore(ListNodePosi(T)&p, T const&e)//作为前驱插入
{
    p->insertAsPred(e);
    return p->pred;
}
Here is insert as predcessor:
 ListNodePosi(T) ListNode<T>::insertAsPred(T const&e)
    {
        ListNodePosi(T) x = new ListNode<T>(e, pred, this);
        pred->succ = x;
        pred = x;
        return x;
    }
Aucun commentaire:
Enregistrer un commentaire