从尾到头打印链表(Java)
题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路
一开始忽视了右边的提示
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
int val提示了是整数,一开始想的是字符型,把ListNode转为一个StringBuffer,然后用reverse函数翻转,再赋值给ArrayList。
后来发现是整数,所以直接用数组就可以,比字符更简单方便。
问题
1.没有考虑到ListNode为空的情况,加上判断就可以。
ArrayList List = new ArrayList();
if(listNode==null)
{
return List;
//return null;
//直接return null会报错,因为要求了返回ArrayList
}
错误提示
2.没有考虑到最后的边界情况,因为在最后一个节点也sum++,所以将数组的值赋给ArrayList时应该是List.add(a[sum-1-i]);而不是List.add(a[sum-i]);
通过代码
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
/*StringBuffer s=new StringBuffer();
s.setLength(10000000);
int len=0;
while(listNode!=null)
{
s.setCharAt(len,(char)(listNode.val+48));
len++;
listNode=listNode.next;
}
s.setLength(len);
StringBuffer s1=s.reverse();
String s2=s1.toString();
ArrayList List = new ArrayList();
int i=0;
for(i=0;i<len;i++)
{
List.add(s2.charAt(i));
}
return List;*/
int[] a=new int[100000];
int sum=0;
int i=0;
ArrayList List = new ArrayList();
if(listNode==null)
{
return List;
}
while(listNode!=null)
{
a[sum]=listNode.val;
sum++;
listNode=listNode.next;
}
for(i=0;i<sum;i++)
{
List.add(a[sum-1-i]);
}
return List;
}
}