#include <iostream>
using namespace std;
#include<stdlib.h>
#include<stack>
typedef struct node //节点结构
{
struct node *next;
int val;
node(int m,struct node): val(m),next(NULL)
{}
}Node;
Node* Create()//尾插法创建单链表
{
Node *p=NULL,*q=NULL,*head=NULL;
p=(Node *)malloc(sizeof(Node));
p->next=NULL;
int flag =0;
while(1==scanf("%d",&(p->val)))//当输入的字符不是数字时 循环结束
{
flag =1;
if(head==NULL)
{
head = p;
}
else
{
q->next=p;
}
q=p;
p=(Node *)malloc(sizeof(Node));
p->next=NULL;
}
if(flag ==0) //说明一个节点也没有
return NULL;
free(p);
p=NULL;
q->next=NULL;
return head;
}
void Reverse(Node *head) //循环实现
{
if(head == NULL)
return ;
Node *p = head;
stack<Node *> nodes;
while(p!=NULL)
{
nodes.push(p);
p=p->next;
}
while(!nodes.empty())
{
p=nodes.top();
cout<<p->val<<" ";
nodes.pop();
}
}
void Reverse(Node *head) //递归实现
{
if(head!=NULL)
{
if(head->next!=NULL)
{
Reverse(head->next);
}
cout<<head->val<<" ";
}
}
//功能测试: 由用户自己手动收入数字 以非数字字符结束
void main()
{
Node *head = Create();
Reverse(head);
cout<<endl;
}