剑指Offer 从尾到头打印链表

剑指Offer 从尾到头打印链表

题目描述

输入一个链表,按链表值从尾到头的顺序返回一个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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章