题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
package com.jianzhioffer;
import java.util.ArrayList;
import java.util.Stack;
public class ReverseList {
public static void main(String[] args){
ListNode l1 = new ListNode(1);
ListNode l2 = new ListNode(2);
ListNode l3 = new ListNode(3);
ListNode l4 = new ListNode(4);
ListNode l5 = new ListNode(5);
l1.next = l2;
l2.next = l3;
l3.next = l4;
l4.next = l5;
ArrayList<Integer> list = printListFromTailToHead(l1);
for(Integer i : list){
System.out.println(i);
}
list = printListFromTailToHeadByStack(l1);
for(Integer i : list){
System.out.println(i);
}
}
// 利用ArrayList的add方法
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(null == listNode)
return list;
ListNode temp = listNode;
while(temp != null){
list.add(0, temp.val);
temp = temp.next;
}
return list;
}
// 利用Stack
public static ArrayList<Integer> printListFromTailToHeadByStack(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(null == listNode)
return list;
Stack<Integer> stack = new Stack<Integer>();
ListNode temp = listNode;
while(temp != null){
stack.push(temp.val);
temp = temp.next;
}
while(!stack.isEmpty()){
list.add(stack.pop());
}
return list;
}
}
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
总结: 这道题相对简单, 解决方法有很多, 方法一: 利用ArrayList的add方法,循环链表,每次将链表的值加入到ArrayList的第一个位置,这样就实现了将链表从尾到头加入到ArrayList中。
方法二: 利用Stack类, 循环链表,每次将链表的节点压入到栈中,然后出栈,将出栈的值加入到ArrayList中。这样也可以实现从尾到头加入到ArrayList中。
方法三: 将链表反转,然后循环反转后的链表,即可。