題目描述
輸入一個鏈表,按鏈表值從尾到頭的順序返回一個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;
}