//--------------------------------------------------- public bool Contains(T data) { DoublyNode <T> current = head; while (current != null) { if (current.Data.Equals(data)) { return(true); } current = current.Next; } return(false); }
public int count; // количество элементов в списке // добавление элемента public void Add(T data) { DoublyNode <T> node = new DoublyNode <T>(data); if (head == null) { head = node; } else { tail.Next = node; node.Previous = tail; } tail = node; count++; }
//--------------------------------------------------- public static CollectionType <T> operator +(T data, CollectionType <T> DLL)//добавлкение в начало { DoublyNode <T> node = new DoublyNode <T>(data); DoublyNode <T> temp = DLL.head; node.Next = temp; DLL.head = node; if (DLL.count == 0) { DLL.tail = DLL.head; } else { temp.Previous = node; } DLL.count++; return(DLL); }
//--------------------------------------------------- public static CollectionType <T> operator *(CollectionType <T> list1, CollectionType <T> list2)//объединение двух списков { DoublyNode <T> head1 = list1.head; DoublyNode <T> head2 = list2.head; CollectionType <T> list3 = new CollectionType <T>(); while (head1 != null) { list3.Add(head1.Data); head1 = head1.Next; } while (head2 != null) { list3.Add(head2.Data); head2 = head2.Next; } return(list3); }
//--------------------------------------------------- public static bool operator ==(CollectionType <T> list1, CollectionType <T> list2)//проверка на равенство { DoublyNode <T> head1 = list1.head; DoublyNode <T> head2 = list2.head; while (head1 != null && head2 != null) { if (Equals(head1.Data, head2.Data)) { head1 = head1.Next; head2 = head2.Next; } else { return(false); } } return(true); }
// удаление public bool Remove(T data) { DoublyNode <T> current = head; // поиск удаляемого узла while (current != null) { if (current.Data.Equals(data)) { break; } current = current.Next; } if (current != null) { // если узел не последний if (current.Next != null) { current.Next.Previous = current.Previous; } else { // если последний, переустанавливаем tail tail = current.Previous; } // если узел не первый if (current.Previous != null) { current.Previous.Next = current.Next; } else { // если первый, переустанавливаем head head = current.Next; } count--; return(true); } return(false); }
//--------------------------------------------------- public void Clear() { head = null; tail = null; count = 0; }