C#创建初始化链表的方式(个人目前写出3种创建的方式)

链表的类如下:

 class ListNode
    {
        public int val { get; set; }
        public ListNode next { get; set; }
        public ListNode(int _val)
        {
            val = _val;
        }
    }

 

方法一:

  使用递归来创建,每次只选取第一个元素,逐步拼接

 public static ListNode getListNode(List<int> list)
        {
            if (list.Count == 0) { return null; }
            ListNode ln = new ListNode(list[0]);
            ln.next = getListNode(list.Where((x,x_index)=>x_index!=0).ToList());
            return ln;
        }

方法二:

  使用ListNode数组,首先遍历所有节点值,创建成节点对象填充数组中,然后使用数组内部各个对象的层层拼接

  public static ListNode getListNode2(List<int> list)
        {
            if (list.Count == 0) { return null; }
            List<ListNode> listnode = new List<ListNode>();
            list.ForEach(x=> listnode.Add(new ListNode(x)));
            for (int i = 0; i < listnode.Count-1; i++)
            {
                listnode[i].next = listnode[i + 1];
            }
            return listnode[0];
        }

方法三:

  这种思想,也是突然受到启发,从后面一点点构造对象,然后让前面的对象指向后面,然后再让前面的对象指向这个,一直到头,完成链表的创建

  public static ListNode getListNode3(List<int> list)
        {
            if (list.Count == 0) { return null; }
            else if (list.Count == 1) { return new ListNode(list[0]); }
            ListNode p = new ListNode(list[list.Count-1]);//初始化为最后一个元素
            ListNode t=new ListNode(list[list.Count-2]);
            for (int i = list.Count-2; i >=0 ; i--)
            {
                t = new ListNode(list[i]);
                t.next = p;
                p = t;
            }
            return t;
        }

 

个人推荐使用方法二和方法三,原因很简单,最好别递归哦,因为性能非常低。

 

posted @ 2020-05-14 15:41  程序杰杰  阅读(1877)  评论(0编辑  收藏  举报