版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qinjisheng_11/article/details/89466205
从头到尾打印链表
题目:
输入一个链表,按链表值从尾到头的顺序返回一个
ArrayList
。
想法一:
完全使用递归的方法:
ArrayList<Integer> list = new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode != null) {
printListFromTailToHead(listNode.next);
list.add(listNode.val);
}
return list;
}
想法二:
使用链表逆置的方法:
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
if (listNode == null) {
return list;
}
ListNode pre = listNode.next;
ListNode post = pre.next;
listNode.next = null;
while (post != null) {
pre.next = listNode;
listNode = pre;
pre = post;
post = post.next;
}
pre.next = listNode;
listNode = pre;
while (listNode != null) {
list.add(listNode.val);
listNode = listNode.next;
}
return list;
}
想法三:
使用栈的方法
import java.util.ArrayList;
import java.util.*;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
if (listNode == null) {
return list;
}
Stack<ListNode> stack = new Stack<ListNode>();
while (listNode != null) {
stack.push(listNode);
listNode = listNode.next;
}
while (!stack.isEmpty()) {
ListNode pop = stack.pop();
list.add(pop.val);
}
return list;
}
}