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

来源:互联网 发布:windows 做磁盘条带化 编辑:程序博客网 时间:2024/05/01 07:26

九度链接:http://ac.jobdu.com/problem.php?pid=1511

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

题目描述:

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

输入:

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

输出:

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

样例输入:
12345-1
样例输出:
54321
思路:

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

#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;}


0 0