链表的逆序输出(链表)
题目描述
按数字输入顺序创建单链表。不可借助数组、容器,不可改变原链表、不可开辟新结点空间。编程实现单链表的逆序输出。
输入
测试次数t
每组测试数据一行,格式如下:
数据个数n,后跟n个整数
输出
对每组测试数据,逆序输出单链表。
示例输入
2
10 1 2 3 4 5 6 7 8 9 10
4 19 20 15 -10
示例输出
10 9 8 7 6 5 4 3 2 1
-10 15 20 19
#include<iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
//本题的链表创建和链表销毁可以参考“单链表”一题的做法
Node *create(Node *&head);
void change(Node *head);
void distory(Node *head);
int main()
{
int t,i,m,n;
cin>>t;
for(i=0;i<t;i++)
{
Node *head=NULL;
change(create(head));
cout<<endl;
distory(head);
}
return 0;
}
Node *create(Node *&head)
{
int n;
cin>>n;
Node *tail;
for(int i=0;i<n;i++)
{
Node *p=new Node;
cin>>p->data;
if(head==NULL)
head=p;
else
{
tail->next=p;
}
tail=p;
}
tail->next=NULL;
return head;
}
void change(Node *head)//采用递归的方式不断输出
{
if(head->next==NULL)
{
cout<<head->data<<" ";
return ;//有返回逐渐跳出递归
}
else if(head->next)
change(head->next);
cout<<head->data<<" ";
return ;
}
void distory(Node *head)
{
Node *p;
while(head->next)
{
p=head->next;
head->next=p->next;
delete p;
}
delete head;
}