链接
牛客:从尾到头打印链表
LeetCode:剑指 Offer 06. 从尾到头打印链表
思路
这题方法很经典,方法大致有3种:
- 第一种是先申请一个栈空间,利用栈先进后出的特性,先将 list 里面的值 push进去,再进行 pop,得到的就是反转后的 list,这个方法思路很简单,缺点需要额外的空间。
- 第二种是翻转链表再打印(参考《剑指offer》系列 反转链表(Java)),这个虽然没有空间消耗,但是破坏了原来链表的结构,并不推荐。
- 递归(内部其实也是栈的原理),既没有额外空间消耗,也没有破链表结构,就是思路不是那么清晰。
代码
牛客:
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode == null)
return arrayList;
printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
return arrayList;
}
}
LeetCode:
class Solution {
public int[] reversePrint(ListNode head) {
//先获取链表长度,创建对应长度数组
ListNode currNode = head;
int len = 0;
while(currNode != null){
len ++;
currNode = currNode.next;
}
int[] result = new int[len];
//再次遍历链表,将值倒序填充至结果数组
currNode = head;
while(currNode != null){
result[len - 1] = currNode.val;
len --;
currNode = currNode.next;
}
return result;
}
}
牛客的解法用了递归,LeetCode的解法不需要利用额外的空间,譬如栈,直接利用本身需要返回的数组空间来处理。
本文探讨了从尾到头打印链表的三种方法:使用栈、翻转链表和递归。详细分析了每种方法的优缺点,提供了牛客网和LeetCode上的代码实现,展示了如何在不破坏原链表结构的情况下高效解决问题。
448

被折叠的 条评论
为什么被折叠?



