单链表找错!!简单的我还是不会!1
#include<iostream.h>//使用cout,cin,cerr#include<stdlib.h>//使用exit(1)
template<class T>
struct LinkNode{
T data;
LinkNode<T> *link;
LinkNode(LinkNode<T> *ptr=NULL){ link=ptr; }
LinkNode(const T &item,LinkNode<T> *ptr=NULL)
{ data=item; link=ptr; }
};
template<class T>
class List{
public:
//实验题2.19
List(){ first=new LinkNode<T>; }//无参数构造函数
List(const T &x){ first=new LinkNode<T>(x); }
//有参数构造函数,赋值头结点
List(List<T> &L);//复制构造函数
~List(){ makeEmpty(); delete first; }//析构函数
void makeEmpty();//清空单链表函数
bool IsEmpty()const{// 判表空函数
return first->link==NULL;}
LinkNode<T> *getHead()const{ return first; }//返回附加头结点地址函数
void setHead(LinkNode<T> *p){//设置附加头结点地址函数
makeEmpty();
delete first;
first=p;
}
void inputFront(T endTag);//前插法建立单链表函数。输入
void inputRear(T endTag);//后插法建立单链表函数。输入
void output();//输出函数
private:
LinkNode<T> *first;
};
#include"02_19_060List.h"
template<class T>
List<T>::List(List<T>&L){
T value;
LinkNode<T>*srcptr=L.getHead();
LinkNode<T>*destpr=first=new LinkNode<T>;
while (srcptr->link!=NuLL){
value = srcptr->link->data;
destptr->link=new LinkNode<T>(value);
destptr=destptr->link;
srcptr =srcptr->link;
}
Destptr->link=NULL;
};
//清空单链表函数的实现;
template<class T>
void List<T>::makeEmpty(){
LinkNode<T> *q;
while (first->link!=NULL){
q = first->link;
first->link=q->link;
delete q;
}
};
//前插法建立单链表函数的实现;
template<class T>
void List<T>::inputFront(T endTag){
LinkNode<T>*newNode;T val;
first =new LinkNode<T>;
if (first==NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
cin>>val;
while (val!=endTag){
newNode=new LinkNode<T>(val);
if(newNode ==NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
newNode->link=first->link;
first->link=newNode;
cin>>val;
}
};
//后插法建立单链表函数的实现;
template <class T>
void List <T>::inputRear(T endTag){
LinkNode<T>* newNode,*last;T val;
first = new LinkNode<T>;
if (first == NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
last->link = newNode;last=newNode;last=newNode;
cin>> val; last=first;
while (val!=endTag){
newNode=new LinkNode<T>(val);
if(newNode == NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
last->link = newNode; last = newNode;
cin>>val;
}
last->link=NULL;
};
//输出函数的实现。
template<class T>
void List<T> :: output(){
LinkNode<T> *current=first->link;
while (current!=NULL){
cout<<current->data<<endl;
current=current->link;
}
};
#include"02_19_060List.h"
void main(){
//测试inputFront,output
List<int> L1;
cout<<"前插法建立单链表(1000为结束输入标志):"<<endl;
L1.inputFront(1000);//输入一组不等于1000的整数
L1.output(); cout<<endl;
//测试inputRear
List<int> L2;
cout<<"后插法建立单链表(1000为结束输入标志):"<<endl;
L2.inputRear(1000);//输入一组不等于1000的整数
L2.output(); cout<<endl;
//测试复制构造函数
List<int> L3(L2);
L3.output(); cout<<endl;
//测试makeEmpty
L3.makeEmpty();
L3.output();
}
调试没错 编译有错唉~~!!1