C++单链表类模版实现,一直有错误,望互相讨论
#include<iostream>
using namespace std;
template<class T>
class ListNode
{
public:
T data;
ListNode<T>*next;
};
template<class T>
class List
{
public:
List();
void Insert_Front(const T e);
void Insert_Last(const T e);
ListNode<T>* Find(const T &e);
void Delete(const T &e);
void insert(T e,ListNode<T>*p);
bool IsEmpty();
void OutPut();
~List();
private:
ListNode<T>*head,*tail;
int size;
};
template<class T>
List<T>::List()
{
head=new ListNode<T>();
tail=head;
tail->next=NULL;
size=0;
};
template<class T>
void List<T>::Insert_Front(const T e)
{
ListNode<T>*NewNode=new ListNode<T>();
NewNode->data=e;
if(head==NULL)
{
head=NewNode;
tail=NewNode;
}
else
{
NewNode->next=head;
head=NewNode;
}
++size;
};
template<class T>
void List<T>::Insert_Last(const T e)
{
ListNode<T>*NewNode=new ListNode<T>();
NewNode->data=e;
if(head=NULL)
{
head=NewNode;
tail=NewNode;
}
else
{
tail->next=NewNode;
tail=NewNode;
}
++size;
};
template<class T>
ListNode<T>* List<T>::Find(T e)
{
ListNode<T>*move=head;
while(move!=NULL&&move->data!=e)
{
move=move->next;
}
return move;
};
template<class T>
void List<T>::Delete(const T e)
{
ListNode<T>*Dmove=new ListNode<T>();
Dmove=head;
if(Dmove==NULL)
return;
if(Dmove->data==e)
{
head=Dmove->next;
if(Dmove->next==NULL)
tail=NULL;
delete(Dmove);
return;
}
while(Dmove->next!=NULL&&Dmove->data!=e)
{
Dmove=Dmove->next;
}
if(Dmove->next==NULL)
return;
if(Dmove->next==tail)
{
tail=Dmove;
delete(Dmove->next);
Dmove->next=NULL;
}
}
template<class T>
void List<T>::insert(T e,ListNode<T>*p)
{
ListNode<T>*node=new ListNode<T>(e);
node->data=e;
node->next=p->next;
p-next=node;
if(node->next==NULL)
tail=node;
};
template<class T>
bool List<T>::IsEmpty()
{
if(head->next=NULL)
return true;
else
return false;
};
template<class T>
void List<T>::OutPut()
{
ListNode<T>*node=head;
while(node!=NULL)
{
cout<<node->data<<""<<endl;
node=node->next;
}
cout<<endl;
};
template<class T>
List<T>::~List()
{
ListNode<T>*node=head;
while(node!=tail)
{
delete node;
node=node->next;
}
};
int main()
{
List<int> ilist;
ilist.Insert_Front(123);
ilist.Insert_Last(456);
ilist.OutPut();
cout<<endl;
if(ilist.Find(4))
cout<<"4 yes" <<endl;
else
cout<<"4 no"<<endl;
ilist.Delete(4);
ilist.OutPut();
cout<<endl;
return 0;
}
希望能直接指出错误的地方,不要再重新写一个新的,这样我知道我出错的地方,才能在下次的时候避免它,才能达到练习的目的,谢谢大家
[解决办法]
template<class T>
void List<T>::Insert_Last(const T e)
{
ListNode<T>*NewNode=new ListNode<T>();
NewNode->data=e;
if(head=NULL)//我看到了这个
{
head=NewNode;
tail=NewNode;
}