链表的类如下:
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; }
个人推荐使用方法二和方法三,原因很简单,最好别递归哦,因为性能非常低。