【剑指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;
}

更多题目的完整描述,AC代码,以及解题思路请参考这里https://github.com/iwiniwin/Algorithm
posted @ 2019-04-07 01:29  iwiniwin  阅读(156)  评论(0编辑  收藏  举报