鏈表的類如下:
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; }
個人推薦使用方法二和方法三,原因很簡單,最好別遞歸哦,因為性能非常低。