尾插代码:
template <class T>
void DLinkList<T>::Insert(T x)
{
DNode<T>* s,*l=first;
s = new DNode<T>;
s->data = x;
s->next = first;
s->prior= first->prior;
first->prior->next = s;
first->prior = s;
}
代码的顺序相当重要,现在多了一个前指针,前指针的重置也相当重要。
1.处理好节点的前后指针。
2.再将s节点置入链表中(及修改第一个节点的前指针和最后一个节点的后指针)
3.第二步的注意点是:先修改最后一个节点的后指针,因为最后一个节点的位置始终储存于第一个节点,如果顺序掉换容易丢失位置。
4.除去赋值插入操作的步骤有四步:s节点的前后指针和第一个节点的前指针和最后一个节点的后指针需要修改。
template <class T>
void DLinkList<T>::DispListR()
{
cout << "The length:" << Length() << endl;
cout << "The elements:" << endl;
DNode<T>* p = first->prior; //逆向输出链表
while(p!= first){
cout<<p->data<<" " ;
p=p->prior ;
}
}
逆序输出过程实际上很好理解,前提是把插入操作理顺。