链表的基本操作
用模板类实现。
#include<iostream>
#include<list>
using namespace std;
template<class T> class List;
template<class T>
class ListNode{
friend class List<T>;
private:
ListNode *link;
T data;
ListNode(T);
};
template<class T>
ListNode<T>::ListNode(T element){
data=element;
link=0;
}
template<class T>
class List{
friend class ListIterator;
public:
List(){first=0;};
void Insert(T);
void Delete(T);
void Invert();
void show();
void Concatentate(List<T>);
private:
ListNode<T> *first;
};
template<class T>
void List<T>::Insert(T k){
ListNode<T> *newnode=new ListNode<T> (k);
newnode->link=first;
first=newnode;
}
template<class T>
void List<T>::Delete(T k){
ListNode<T> *previous=0;
ListNode<T> *current;
for(current=first;
current&¤t->data!=k;
previous=current,current=current->link){;}
if(current){
if(previous)previous->link=current->link;
else first=first->link;
delete current;
}
}
template<class T>
void List<T>::Invert(){
ListNode<T> *p=first,*q=0;
while(p)
{
ListNode<T> *r=q;q=p;
p=p->link;
q->link=r;
}
first=q;
}
template<class T>
void List<T>::show(){
for(ListNode<T> *current=first;current;current= current->link){
std::cout<<current->data;
if(current->link) std::cout<<"->";
}
std::cout<<std::endl;
}
template<class T>
void List<T>::Concatentate(List<T> b)
{
if (!first){first = b.first; return;}
if (b.first)
{
ListNode<T> *p;
for (p = first; p->link; p = p->link) ;//空循环
p->link = b.first;
}
}
int main(){
list <char> charlist;
charlist.push_front('b');
charlist.push_front('a');
charlist.push_front('d');
charlist.push_front('c');
std::list<char>::iterator i = charlist.begin();
std::cout << *i <<"->";
while (i != charlist.end())
{
cout << *i << "->";
++i;
}
cout<<"STL库迭代器";
cout << endl;
return 0;
List <int> intlist;
intlist.Insert(5);
intlist.Insert(15);
intlist.Insert(25);
intlist.show();
intlist.Invert();
intlist.Delete(5);
intlist.show();
return 0;
}