剑指offer-面试题5 从尾到头打印链表

剑指offer-面试题5-1 从尾到头打印链表

题目:输入一个链表(的头结点),从尾到头反过来打印出每个结点的值。
【注】:这里实现的链表由于结点是内部类,无法直接传递进入reverse()方法,我决定直接传入整个链表,虽然也实现了题目效果,但仍不够严谨。所以在第二种方法中我们会写一个简单的内部类Node 以契合实现题目要求。详请参见剑指offer-面试题5-2 从尾到头打印链表

思路:

本题考查的是数据结构中的链表操作。
单链表的性质之一:每个结点只有后继结点的信息,无法通过结点自带的信息找到前驱结点。那如何实现题目要求的功能呢?
通过思考,我们发现栈这种数据结构正好能够满足这道题的要求。因为栈正好是后进先出(Last In First Out, 简称为LIFO)的。那么我们用栈来实现这道题目。
链表的数据结构的Java实现:Java实现链表数据结构
栈的数据结构Java实现:Java实现栈数据结构
不多说,看代码:

代码:

package swordOffer;

import linearlist.LinkList;
import stack.*;
/**
 * 这是剑指offer的第二题:
 * 输入一个链表,从尾到头反过来打印出每个结点的值。
 * @author Stephen Huge
 */
public class Ex05ReverseLinkList {
    public static void main(String[] args) {
        LinkList<String> list = new LinkList<String>("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
        System.out.println(list.toString());
        LinkStack<String> reverse = reverseLinkList(list);      
        System.out.println(reverse.toString());     
    }
    /**
     * 一个利用栈反转链表的方法。
     * @param list 要反转的链表
     * @return 反转之后得到的链栈
     */
    public static LinkStack<String> reverseLinkList(LinkList<String> list) {
        if(list.isEmpty()) {
            return null;
        }else{
            LinkStack<String> temp = new LinkStack<String>();
            String next;
            for(int i = 0; i < list.length(); i++) {
                next = list.get(i); 
                if(next != null) {
                    temp.push(next);
                }
            }
            return temp;
        }                   
    }
}

运行结果:

[aaa, bbb, ccc, ddd]
Top[ddd, ccc, bbb, aaa]Buttom

代码逻辑十分简单,就是简单的将链表的每个结点入栈,然后将栈打印出来。其中导入的两个包都是在上面链接里存在的。

参考文章:http://blog.csdn.net/tayanxunhua/article/details/11100097/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值