题目描述:
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题:
方法一:
//反转列表实现
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
List<Integer> list = new ArrayList<Integer>();
if (listNode == null) {
return (ArrayList<Integer>) list;
}
if (listNode.next == null) {
list.add(listNode.val);
return (ArrayList<Integer>) list;
}
//列表反转
ListNode pre = listNode; //当前反转节点的前一个节点
ListNode cur = listNode.next; //当前反转节点
ListNode temp; //还未翻转的第一个节点
while (cur != null) {
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
listNode.next=null;
listNode=pre;
//放入ArrayList中
while (listNode != null) {
list.add(listNode.val);
listNode = listNode.next;
}
return (ArrayList<Integer>) list;
}
方法二:
//递归实现
public class Solution {
ArrayList<Integer> list = new ArrayList<Integer>(); //这个要是个全局变量
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode == null) {
return list;
}
if (listNode.next == null) {
list.add(listNode.val);
return list;
}
if(listNode!=null){
this.printListFromTailToHead(listNode.next);//这里加不加this都行
list.add(listNode.val);
}
return list;
}
}
方法三:
//栈实现
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
Stack<Integer> stack=new Stack<Integer>();
if (listNode == null) {
return list;
}
if (listNode.next == null) {
list.add(listNode.val);
return list;
}
while(listNode!=null){
stack.push(listNode.val);
listNode=listNode.next;
}
while(!stack.isEmpty()){
list.add(stack.pop());
}
return list;
}