📅  最后修改于: 2023-12-03 15:06:09.602000             🧑  作者: Mango
在日常开发中,经常需要对链表进行操作。其中一个常见的操作就是将链表反向打印。本文将介绍一种有趣的链表反向打印方法。
常规的链表反向打印方法是使用栈或递归来实现。而本文介绍的方法则是利用字符流和递归来实现。
具体来说,首先定义一个全局的字符流用于存储链表节点的值。然后递归遍历链表,每次递归时将节点的值添加到字符流的首部。最终输出字符流即可。
下面是该方法的代码实现:
import java.util.*;
public class Solution {
private static StringBuilder sb = new StringBuilder();
public static String printListFromTailToHead(ListNode listNode) {
if (listNode != null) {
printListFromTailToHead(listNode.next);
sb.append(listNode.val);
}
return sb.toString();
}
}
其中,ListNode
是链表节点的定义。
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
下面是一个简单的测试用例:
public static void main(String[] args) {
ListNode list = new ListNode(1);
list.next = new ListNode(2);
list.next.next = new ListNode(3);
System.out.println(printListFromTailToHead(list));
}
运行结果为:
321
这种方法的优点是简单、易懂,并且没有栈或递归造成的额外空间开销。
但是,这种方法在链表很长时,递归次数太多可能会导致栈溢出或者内存不足。因此在实际应用中需谨慎使用。
本文介绍了一种有趣的链表反向打印方法。虽然其不是最优解,但对于小规模的链表操作非常方便,并且可以提高我们思维的创新性。