题目描述:
输入一个链表,反转链表后,输出链表的所有元素。
(hint : 请务必使用链表)
和这道题一样。。
http://blog.csdn.net/s_h_r/article/details/50781947
#include <cstdio>
using namespace std;
typedef struct Node{
int val;
Node *next;
Node(int val = -1) : val(val), next(NULL) {}
}*pNode;
class List{
private:
pNode Head;
pNode Tail;
void Delete_List(pNode);
pNode Recursion_Reserve();
pNode Non_Recursion_Reserve(pNode);
void Traverse(pNode);
public:
void Traverse();
void Insert_Node(int x);
List();
~List();
};
void List::Insert_Node(int x){
Node *node = new Node(x);
this->Tail->next = node;
this->Tail = node;
}
pNode List::Recursion_Reserve(){
pNode p = this->Head->next;
pNode pn = p->next;
pNode pnn = NULL;
this->Head->next = NULL;
p->next = this->Head;
while(pn){
pnn = pn->next;
pn->next = p;
p = pn;
pn = pnn;
}
return p;
}
pNode List::Non_Recursion_Reserve(pNode node){
if(node->next == NULL){
return node;
}
else{
pNode p = Non_Recursion_Reserve(node->next);
node->next->next = node;
node->next = NULL;
return p;
}
}
void List::Traverse(pNode node){
if(node && node != this->Head){
printf("%d", node->val);
if(node->next != this->Head)
printf(" ");
Traverse(node->next);
}
}
void List::Traverse(){
// Traverse(Recursion_Reserve());
Traverse(Non_Recursion_Reserve(this->Head));
}
void List::Delete_List(pNode node){
if(node){
Delete_List(node->next);
delete node;
}
}
List::List(){
Head = Tail = new Node();
}
List::~List(){
Delete_List(this->Tail);
}
int main()
{
int n;
while(scanf("%d", &n) != EOF){
List *list = new List;
int x;
for(int i = 0; i < n; i++){
scanf("%d", &x);
list->Insert_Node(x);
}
if(n == 0)
printf("NULL");
else
list->Traverse();
printf("\n");
// list->Delete_Content();
delete list;
}
return 0;
}