双向循环链表的尾插和逆向输出

尾插代码:

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 ; 
		}  
}

逆序输出过程实际上很好理解,前提是把插入操作理顺。 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值