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

 

個人推薦使用方法二和方法三,原因很簡單,最好別遞歸哦,因為性能非常低。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM