您的位置:首页 > 职场人生

面试题5 从头到尾打印链表

2015-02-03 18:31 197 查看
九度链接:http://ac.jobdu.com/problem.php?pid=1511

题目1511:从尾到头打印链表

题目描述:

输入一个链表,从尾到头打印链表每个节点的值。

输入:

每个输入文件仅包含一组测试样例。

每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。

输出:

对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。

样例输入:
1
2
3
4
5
-1


样例输出:
5
4
3
2
1


思路:

逆序联想到后进先出-->栈,或者递归。考虑到效率,优先选择栈。

#include <stdio.h>
#include <stack>
using namespace std;
typedef struct ListNode {
int data;
ListNode* next;
}ListNode;
void printList(ListNode *phead) {
if (phead->next == NULL)
return;
phead = phead->next;
stack<int> Stack;
int n = 0;
while (phead != NULL) {
Stack.push(phead->data);
phead = phead->next;
n ++;
}
while (!Stack.empty()) {
if (n -- != 0)
printf("%d\n", Stack.top());
else
printf("%d", Stack.top());
Stack.pop();

}
}
int main() {
ListNode *head = new ListNode();
ListNode *p = head;
int d;
scanf("%d", &d);
while (d != -1) {//创建链表
ListNode *tmp = new ListNode();
tmp->data = d;
tmp->next = NULL;
p->next = tmp;
p = p ->next;
scanf("%d", &d);
}
printList(head);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: