LinkedSkipList <T> BuildLvl(LinkedSkipList <T> _lvl) { LinkedSkipList <T> _next = new LinkedSkipList <T>(); _next.head.Lower = _lvl.head; _next.tail.Lower = _lvl.tail; Node <T> i = _lvl.head.Next.Next; Node <T> cur = _next.head; while (i != null && i.Next != null) { cur.Next = new Node <T>(cur.Key, i, cur.Next); cur = cur.Next; i = i.Next.Next; } return(_next); }
LinkedSkipList <T> BuildList(LinkedSkipList <T> _list) { LinkedSkipList <T> lvl = new LinkedSkipList <T>(); Node <T> i = _list.tail; Node <T> j = _list.head; //построение первого уровня while (j != _list.tail) { i.Next = new Node <T>(j.Key, null, j.Next); i = i.Next; j = j.Next; } //пока к-во элементов на текущем уровне >2, каждый второй перекидываем на новый уровень while (lvl.Count() > 2) { lvl = BuildLvl(lvl); } return(lvl); }