Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }