题目描述:
给定一个链表,从尾部到头部打印输出链表结点的值
方法一:利用栈实现
遍历入栈,再遍历出栈。
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);
}