剑指offer三从头到尾打印链表

一、题目:

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

二、解题方法:

  方法一:采用递归的方式实现

       方法二:借助堆栈的“后进先出”实现

import java.util.ArrayList;
import java.util.Stack;

/**
 * 输入一个链表,从尾到头打印链表每个节点的值
 */
class Test13 {
    public static void main(String[] args) {
        //创建单链表
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        node1.next = node2;
        node2.next = node3;

        //采用递归的方式实现
        PrintListTailtoHead p = new PrintListTailtoHead();
        ArrayList<Integer> list = p.printListFromTailToHead(node1);
        System.out.println(list.toString());

        System.out.println("-------------");

        //借助堆栈的“后进先出”实现(容易理解)
        PrintListTailtoHead2 p2 = new PrintListTailtoHead2();
        ArrayList<Integer> list2 = p2.printListFromTailToHead2(node1);
        System.out.println(list2.toString());
    }
}


//节点
class ListNode {
    int value;
    ListNode next = null;

    ListNode() {}

    ListNode(int value) {
        this.value = value;
    }
}

//方法1:采用递归的方式实现
class PrintListTailtoHead {
    public ArrayList<Integer> printListFromTailToHead(ListNode headNode) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        //递归
        if (headNode != null) {
            if (headNode.next != null) {
                list =printListFromTailToHead(headNode.next);
            }
            list.add(headNode.value);
        }
        return list;
    }
}

//方法2:借助堆栈的“后进先出”实现
class PrintListTailtoHead2{
    public ArrayList<Integer> printListFromTailToHead2(ListNode headNode) {
        //存入栈中
        Stack<Integer> stack=new Stack<Integer>();
        while (headNode!=null){
            stack.push(headNode.value);
            headNode=headNode.next; //重要,不要忘记
        }

        //从栈中取出存入集合中
       ArrayList<Integer> arrayList=new ArrayList<Integer>();
        while (!stack.empty()) {
            arrayList.add(stack.pop());

        }

        //返回结果
        return arrayList;
    }
}
View Code

 

posted @ 2017-09-29 09:37  hezhiyao  阅读(...)  评论(...编辑  收藏