【剑指Offer面试题】 九度OJ1511:从尾到头打印链表

题目链接地址:
http://ac.jobdu.com/problem.php?pid=1511

从尾到头打印链表

时间限制:1 秒内存限制:128 兆特殊判题:否提交:6036解决:1817
题目描述:
输入一个链表,从尾到头打印链表每个节点的值。
输入:
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
输出:
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
样例输入:
1
2
3
4
5
-1
样例输出:
5
4
3
2
1


分析:

方法一:借用栈倒序输出链表
链表在访问时总是从头开始访问,边访问边入栈,栈的特点就是先进后出,所以出栈时就是链表的反向输入。
方法二:递归实现,完美
每访问到一个结点,就递归访问输出后面的一个结点,然后再输出结点自身,最终就是反向输出。


方法二的九度AC实现:

/********************************* 
----------------------------------- 
【剑指Offer面试题】从尾到头打印链表
----------------------------------- 
Author:牧之丶  Date:2015年
Email:bzhou84@163.com 
**********************************/  
#include <stdio.h>
#include <stdlib.h> 
#include <cstring>
#include <string>
#include <iostream>  
using namespace std;  

typedef struct Node
{
    int data;
    struct Node *next;
}Node,*pNode;

/*
递归从尾到头打印单链表
*/
void PrintListReverse(pNode pHead)
{
    if(pHead == NULL)
        return;
    if(pHead->next != NULL)
        PrintListReverse(pHead->next);
    printf("%d\n",pHead->data);
}

pNode CreateList()
{
    int val;
    pNode pHead = NULL;
    pNode pCur = NULL;
    do
    {
        scanf("%d",&val);
        if(val != -1)
        {
            pNode pNew = (pNode)malloc(sizeof(Node));
            pNew->data = val;
            pNew->next = NULL;

            if(pHead == NULL)
            {
                pHead = pNew;
                pCur = pHead;
            }
            else
            {
                pCur->next = pNew;
                pCur = pCur->next;
            }
        }
    }while(val != -1);

    return pHead;
}
int main()
{
    pNode pHead = CreateList();
    PrintListReverse(pHead);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值