题目1511:从尾到头打印链表
-
题目描述:
-
输入一个链表,从尾到头打印链表每个节点的值。
-
输入:
-
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
-
输出:
-
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
-
样例输入:
-
1 2 3 4 5 -1
-
样例输出:
-
5 4 3 2 1
算法分析
逆序我们首先想到的是栈,又想到递归过程就是栈的入栈出栈过程,所以我们用递归来做。
源程序
#include <stdio.h>
struct Node{
int num;
Node *next;
public:
Node(int num_):num(num_),next(NULL){};
};
Node *pbegin=new Node(0);
Node *pend=pbegin;
void init(){
pbegin=new Node(0);
Node *temNode=NULL;
int num = 0;
while(1){
scanf("%d",&num);
if(num==-1)
break;
temNode = new Node(num);
if(pbegin->next ==NULL){
pbegin->next = temNode;
pend = temNode;
}else{
pend->next = temNode;
pend = temNode;
}
}
}
void printList(Node *node){
if(node==NULL)
return;
printList(node->next);
printf("%d\n",node->num);
}
void judo(){
init();
printList(pbegin->next);
}
int main()
{
judo();
return 0;
}
/**************************************************************
Problem: 1511
User: KES
Language: C++
Result: Accepted
Time:100 ms
Memory:5548 kb
****************************************************************/