题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
解法1
这道题主要思路是while循环从头遍历整个列表,将每个元素插入到List中,因为要求是从尾到头,所以每次插入时利用Insert函数不断将元素插入到第一的位置
实现代码
public class ListNode
{
public int val;
public ListNode next;
public ListNode(int x)
{
val = x;
}
}
public List<int> printListFromTailToHead(ListNode listNode)
{
List<int> list = new List<int>();
while (listNode != null)
{
list.Insert(0, listNode.val);
listNode = listNode.next;
}
return list;
}
一点补充
针对C#语言,调用Insert方法的性能消耗会比Add方法多,但如果使用Add方法,最后需要再调用一次Reverse方法进行翻转。经过多次测试,这两种方式的性能消耗没有明显差距,和测试数据集相关。下面贴上第二种方法实现的代码。
public List<int> printListFromTailToHeadOptimize(ListNode listNode)
{
List<int> list = new List<int>();
while (listNode != null)
{
list.Add(listNode.val);
listNode = listNode.next;
}
list.Reverse();
return list;
}
更多题目的完整描述,AC代码,以及解题思路请参考这里https://github.com/iwiniwin/Algorithm