#include <iostream>
/**
* 定义NODE
*/
template<typename T>
struct Node {
T m_data;
Node<T> *next;
Node(T t=new T()){m_data=t; next=NULL;}
};
/**
* 定义链表
*/
template<typename T>
class List {
private:
Node<T> *head;
public:
List(){head=NULL;}
List<T>& insert(T i);
void reverse();
void print();
};
/**
* 插入元素(头插)
*/
template<typename T>
List<T>& List<T>::insert(T i){
Node<T> *p = head;
head = new Node<T>(i);
head->next = p;
return *this;
}
/**
* 打印链表内容
*/
template<typename T>
void List<T>::print(){
Node<T> *pt = head;
if(pt == NULL ) return;
do{
std::cout << pt->m_data << " ";
pt = pt->next;
}while(pt != NULL);
std::cout << std::endl;
}
/**
* 反序打印指定表头的链表
*/
template<typename T>
void ergodic(Node<T> * head){
if(head == NULL ) return;
if(head->next != NULL)
ergodic(head->next);
std::cout << head->m_data << " ";
}
/**
* 反序打印链表
*/
template<typename T>
void List<T>::reverse(){
ergodic(head);
std::cout << std::endl;
}
/**
* 测试代码
*/
int main(){
List<int> l, l1, l2;
l.insert(1).insert(2);
l.print();
l.reverse();
l1.insert(3);
l1.print();
l1.reverse();
l2.print();
l2.reverse();
List<char> lc;
lc.insert('a').insert('c').insert('d');
lc.print();
lc.reverse();
return 0;
}
结果: