Beispiel #1
0
        public static RecursiveLinkedList <T> AddElementToPresortedList <T>(this RecursiveLinkedList <T> list, T newElement, IComparer <T> comparer = null)
        {
            comparer ??= Comparer <T> .Default;

            var newList = Copy(list);

            var pointer = newList;

            while (!pointer.IsEmpty)
            {
                var isNewElementLess = comparer.Compare(newElement, pointer.Head) < 0;
                if (isNewElementLess)
                {
                    pointer.AddHead(newElement);
                    break;
                }

                pointer = pointer.Tail;
            }

            if (pointer.IsEmpty)
            {
                pointer.AddHead(newElement);
            }

            return(newList);
        }
Beispiel #2
0
        private static RecursiveLinkedList <T> Copy <T>(RecursiveLinkedList <T> list)
        {
            if (list.IsEmpty)
            {
                return(new RecursiveLinkedList <T>());
            }

            return(new RecursiveLinkedList <T>(list.Head, Copy(list.Tail)));
        }
Beispiel #3
0
 public RecursiveLinkedList(T head, RecursiveLinkedList <T> tail)
 {
     _head = head;
     Tail  = tail;
 }