#include<iostream>
#include<stack>
using namespace std;
struct Node
{
int data;
Node* next;
};
Node* head = NULL;
void Reverse()
{
stack<Node*> S;
Node* temp = head;
while(temp != NULL)
{
S.push(temp);
temp = temp->next;
}
Node* temp1 = S.top();
head = temp1;
S.pop();
while(!S.empty())
{
temp1->next = S.top();
S.pop();
temp1 = temp1->next;
}
temp1->next=NULL;
}
void Print()
{
Node* temp = head;
while(temp != NULL)
{
printf("%d ",temp->data);
temp = temp->next;
}
printf("\n");
}
void Insert(int data)//在链表尾部插入节点
{
Node *temp = new Node;
temp->data = data;
temp->next = NULL;
if(head == NULL)
{
head = temp;
}
else
{
Node* temp1 = head;
while(temp1->next != NULL)
temp1 = temp1->next;
temp1->next = temp;
}
}
int main()
{
Insert(11);
Print();
Insert(91);
Print();
Insert(176);
Print();
Insert(87);
Print();
Insert(657);
Print();
printf("Before reverse, the first data:\n");
printf("%d\n",head->data);
Reverse();
printf("After reverse, the first data:\n");
printf("%d\n",head->data);
printf("\n");
Print();
return 0;
}