Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class OneWayList<T> : IOneWayList<T>, IEnumerable<T> where T : IComparable
- {
- private Node<T> head;
- public IOneWayList<T> Add(T value)
- {
- if (head == null)
- {
- head = new Node<T>(value);
- return this;
- }
- var currentNode = head;
- if (currentNode.Value.CompareTo(value) > 0)
- {
- head = new Node<T>(value, currentNode);
- return this;
- }
- while (currentNode.Next != null && currentNode.Next.Value.CompareTo(value) < 0)
- {
- currentNode = currentNode.Next;
- }
- // var next = currentNode.Next;
- currentNode.Next = new Node<T>(value, currentNode.Next);
- return this;
- }
- public IOneWayList<T> Delete(T value)
- {
- var currentNode = head;
- while (!currentNode.Next.Value.Equals(value))
- {
- currentNode = currentNode.Next ?? throw new Exception("Element not found.");
- }
- var next = currentNode.Next?.Next;
- currentNode.Next = next;
- return this;
- }
- public int Find(T value)
- {
- var currentNode = head;
- var index = 0;
- while (currentNode != null)
- {
- if (currentNode.Value.Equals(value))
- return index;
- index++;
- currentNode++;
- }
- throw new Exception("Element not found.");
- }
- public T this[int index]
- {
- get
- {
- var currentNode = head;
- while (currentNode != null)
- {
- if (index == 0)
- {
- return currentNode.Value;
- }
- currentNode = currentNode.Next;
- index--;
- }
- throw new IndexOutOfRangeException("Index out of range.");
- }
- }
- public void Clear()
- {
- head = null;
- }
- public void Print()
- {
- var currentNode = head;
- while (currentNode != null)
- {
- Console.Write(currentNode.Value + " ");
- currentNode = currentNode.Next;
- }
- Console.WriteLine();
- }
- public IEnumerator<T> GetEnumerator()
- {
- if (head == null)
- yield break;
- var currentNode = head;
- do
- {
- yield return currentNode.Value;
- currentNode++;
- } while (currentNode != null);
- }
- IEnumerator IEnumerable.GetEnumerator()
- {
- return GetEnumerator();
- }
- }
- public class Node<T>
- {
- public T Value { get; set; }
- public Node<T> Next { get; set; }
- public Node(T value, Node<T> next = null)
- {
- Value = value;
- Next = next;
- }
- public static Node<T> operator ++(Node<T> node)
- {
- return node.Next;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement