查看原文
其他

1,倒叙打印链表

博哥 视频学算法 2022-05-19

比如一个链表是:1→2→3→4→5

我们打印的结果是:[5,4,3,2,1]


如果是双向链表的话,我们直接从后往前输入就行了。我们这里说的不是双向链表,而是单向链表。如果是单向链表的话,我们有4种方式

第一种是先把链表反转,然后再顺序输出。

第二种是先把链表输出然后再把输出的结果反转

第三种方式是先把链表输入到一个栈中,然后再一个个出栈

第四种是使用递归的方式


前两种方式就不在写了,这里主要来看一下第三种和第四种方式


第三种方式



先把链表节点压入栈中的过程

再看一下链表出栈的过程


原理比较简单,我们来看下代码部分

public void printRevers(ListNode root) { Stack<Integer> stack = new Stack<>(); //先压栈 while (root != null) { stack.add(root.val); root = root.next; } //在出栈 while (!stack.isEmpty()) { System.out.println(stack.pop()); }}


第四种方式



第四种方式是使用递归的方法,因为递归分为递和归两部分,传递的时候我们让他一直往后找,找到链表的结尾我们才开始打印,因为递归的时候往后传递完了会往前回溯,在往前回溯的时候我们再打印节点。这样就相当于从链表的尾部到头部开始打印。我们来看下代码

public void printRevers(ListNode root) { if (root == null) return; printRevers(root.next); System.out.println(root.val);}


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存