• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

链表的类如下:

 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;
        }

 

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap