剑指offer系列一:从尾到头打印链表

来源:互联网 发布:保融软件 编辑:程序博客网 时间:2024/06/09 00:24

题目描述:
给定一个链表,从尾部到头部打印输出链表结点的值
方法一:利用栈实现
遍历入栈,再遍历出栈。

public class ListNode {    Integer val;    public ListNode next;    public ListNode(Integer val) {        this.val = val;    }}public static class PrintNode {        public void PrintListReversinglyIteratively(ListNode head) {            if (head == null) {                return;            }            Stack<ListNode> stack = new Stack<ListNode>();            while (head != null) {                stack.push(head);                head = head.next;            }            while (!stack.isEmpty()) {                ListNode node = stack.pop();                System.out.print(node.val + ",");            }        }}public static void main(String[] args) {        ListNode node1 = new ListNode(1);        ListNode node2 = new ListNode(2);        ListNode node3 = new ListNode(3);        ListNode node4 = new ListNode(4);        ListNode node5 = new ListNode(5);        ListNode node6 = new ListNode(6);        ListNode node7 = new ListNode(7);        ListNode node8 = new ListNode(8);        node1.next = node2;        node2.next = node3;        node3.next = node4;        node4.next = node5;        node5.next = node6;        node6.next = node7;        node7.next = node8;        node8.next = null;        new PrintNode().PrintListReversinglyIteratively(node1);    }

方法二:利用递归实现

public class ListNode {    Integer val;    public ListNode next;    public ListNode(Integer val) {        this.val = val;    }}public static class PrintNode {        public void PrintListReversinglyIteratively2(ListNode head) {            if (head == null) {                return;            }            PrintListReversinglyIteratively2(head.next);            System.out.print(head.val + ",");        }}public static void main(String[] args) {        ListNode node1 = new ListNode(1);        ListNode node2 = new ListNode(2);        ListNode node3 = new ListNode(3);        ListNode node4 = new ListNode(4);        ListNode node5 = new ListNode(5);        ListNode node6 = new ListNode(6);        ListNode node7 = new ListNode(7);        ListNode node8 = new ListNode(8);        node1.next = node2;        node2.next = node3;        node3.next = node4;        node4.next = node5;        node5.next = node6;        node6.next = node7;        node7.next = node8;        node8.next = null;        new PrintNode().PrintListReversinglyIteratively2(node1);    }