return ((first->next == NULL) true : false);
}
template<class T>
void List<T>::input(T endTag)
{
makeEmpty();//在输入前先清空链表
LinkNode<T> *newNode,*last = first;
T value;
cin》value;
while(value != endTag)
{
newNode = new LinkNode<T>(value);
newNode->prior = last;
last->next = newNode;
last = newNode;
cin》value;
}
last->next = first; //重新首尾连接
first->prior = last;
}
template<class T>
void List<T>::output()//输出
{
cout《"双向链表输出如下:"《endl;
LinkNode<T> *current = first->next;
int count = 0;
while(current != first)
{
cout《"#"《count+1《":"《current->data《endl;
current = current->next;
count++;
}
}
template<class T>
void List<T>::Sort()//最小选择 排序
{
LinkNode<T> *current1,*current2;//下面连续取后继指针把外层循环控制在倒数第二个结点
for(current1 = first->next ; current1->next != first ; current1 = current1->next)
{
for(current2 = current1->next ; current2 != first ; current2 = current2->next)
{
if(current1->data > current2->data)
{
T temp;
temp = current1->data;
current1->data = current2->data;
current2->data = temp;
}
}
}
}
template<class T>
void List<T>::operator= (List<T> &L)
{
makeEmpty();//先全部销毁指针资源
LinkNode<T> *L_HEAD = L.getHead(); //获取首指针 遍历终止条件
LinkNode<T> *srcptr = L_HEAD->next; //获取头指针 用于遍历
LinkNode<T> *destptr = first; //= new LinkNode<T>;//不用于赋值初始化,只用于复制,不用建立新头结点
LinkNode<T> *newNode;
T value;
while(srcptr != L_HEAD)//直到最后一个结点的尾指针为空结束
{
value = srcptr->data;
newNode = new LinkNode<T>(value);
newNode->prior = destptr;//往新链表的后面插入
destptr->next = newNode;
srcptr = srcptr->next;//后移
destptr = destptr->next;
}
destptr->next = first;//首尾相接 循环
first->prior = destptr;
}