剑指offer problem 5:从尾到头打印链表(java)

2018-12-11  本文已影响0人  vendettar

import java.util.Stack;

/**
 * 输入一个链表的头结点,从尾到头反过来打印出每个结点的值.
 */

//首先定义链表结构
class LinkNode {
    LinkNode next;
    int node_value;
}

public class PrintListReversely {
    /**
     * 递归实现
     * @param headNode 头结点
     */
    private void recursivelyPrint(LinkNode headNode) {
        if (headNode.next == null){
            System.out.print(headNode.node_value  + " ");
        }else {
            recursivelyPrint(headNode.next);
            System.out.print(headNode.node_value  + " ");
        }
    }

    /**
     * 用栈的思想来实现
     * @param headNode 头结点
     */
    private void reversePrint(LinkNode headNode) {

        Stack<LinkNode> stack = new Stack<>();
        while (headNode != null) {
            stack.push(headNode);
            headNode = headNode.next;
        }

        while (!stack.isEmpty()) {
            System.out.print(stack.pop().node_value + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        //输入的链表有多个结点
        PrintListReversely plr = new PrintListReversely();
        LinkNode node1 = new LinkNode();
        LinkNode node2 = new LinkNode();
        LinkNode node3 = new LinkNode();
        LinkNode node4 = new LinkNode();
        node1.node_value = 1;
        node2.node_value = 2;
        node3.node_value = 3;
        node4.node_value = 0;
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        plr.reversePrint(node1);
        plr.recursivelyPrint(node1);
    }
}

result:

0 3 2 1 
0 3 2 1 
上一篇下一篇

猜你喜欢

热点阅读