实现:拷贝构造函数,赋值构造函数(和拷贝类似不过我写错了)析构函数,头插入
#include<iostream>
using namespace std;
template <typename E>
class LinkedList
{
private:
// inner class: linked-list node
class Node
{
public:
E data;
Node * next;
};
Node * first;
public:
LinkedList() {
first = 0;
}
~LinkedList() {
while (first != 0) {
removeFirst();
}
}
E getFirst() const{
return first->data;
}
bool isEmpty() const{
return first == 0;
}
//You should just submit the function, not the class or the main function.
LinkedList(const LinkedList & that);
LinkedList & operator= (const LinkedList & that);
void removeFirst() ;
void addFirst(E data);
};
template <typename E>
LinkedList<E>::LinkedList(const LinkedList & that){
if(that.first == NULL){
first = NULL;
return;
}
Node * flag = that.first;
first = new Node();
first->data = flag->data;
flag = flag->next;
Node * p = first;
while(flag!=NULL){
p->next = new Node();
p = p->next;
p->data = flag->data;
flag = flag->next;
}
p->next = NULL;
}
template <typename E>
LinkedList<E> & LinkedList<E>::operator= (const LinkedList & that){
if(that.first == NULL){
first = NULL;
return;
}
Node * flag = that.first;
first = new Node();
first->data = flag->data;
flag = flag->next;
Node * p = first;
while(flag!=NULL){
p->next = new Node();
p = p->next;
p->data = flag->data;
flag = flag->next;
}
p->next = NULL;
}
template <typename E>
void LinkedList<E>::removeFirst(){
Node * f = first;
first = first->next;
delete f;
}
template <typename E>
void LinkedList<E>::addFirst(E data){
if(first == NULL){
first = new Node();
first->data = data;
first->next = NULL;
return;
}
//not empty
Node * p = new Node();
p->data = data;
p->next = first;
first = p;
}