从尾到头打印链表
Posted aiguozou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从尾到头打印链表相关的知识,希望对你有一定的参考价值。
输一个链表的头结点,从尾到头反过来打印出每一个节点的值.
节点定义如下
class ListNode
int val;
ListNode next = null;
public ListNode(int val)
this.val = val;
思路
从头到尾遍历链表,把每个节点放入栈中,遍历完后,从栈顶开始逐个输出节点的值,
此时输出的节点的顺序已经反过来了
实现
public static void printListReversingly_Iteratively(ListNode node)
Stack<ListNode> stack = new Stack<>();
if (node == null)
return;
for (node = node; node != null; node = node.next)
stack.push(node);
while (!stack.isEmpty())
System.out.println(stack.pop().val);
递归的本质就是一个栈结构,于是要使用递归来实现,我们每访问到一个节点的时候,
先递归输出它后面的节点,再输出该节点自身,这样链表的输出结果就反过来了
public static void printListReversingly_Recursively(ListNode node)
if (node == null)
return;
printListReversingly_Iteratively(node.next);
System.out.println(node.val);
测试用例
public static void test()
ListNode ListNode1 = new ListNode(1);
ListNode ListNode2 = new ListNode(2);
ListNode ListNode3 = new ListNode(3);
ListNode ListNode4 = new ListNode(4);
ListNode ListNode5 = new ListNode(5);
ListNode1.next=ListNode2;
ListNode2.next=ListNode3;
ListNode3.next=ListNode4;
ListNode4.next=ListNode5;
System.out.println("采用栈:");
printListReversingly_Iteratively(ListNode1);
System.out.println("采用递归:");
printListReversingly_Recursively(ListNode1);
输出
采用栈:
5
4
3
2
1
采用递归:
5
4
3
2
1
以上是关于从尾到头打印链表的主要内容,如果未能解决你的问题,请参考以下文章