Advertisement
Matixs

Untitled

May 10th, 2023
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.16 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace Fedortsov.Lab7Exc1
  5. {
  6.     public class DoublyLinkedList<T>
  7.     {
  8.         private class Node
  9.         {
  10.             public T Value { get; set; }
  11.             public Node Next { get; set; }
  12.             public Node Previous { get; set; }
  13.  
  14.             public Node(T value)
  15.             {
  16.                 Value = value;
  17.                 Next = null;
  18.                 Previous = null;
  19.             }
  20.         }
  21.  
  22.         private Node head;
  23.         private Node tail;
  24.         public int Count { get; private set; }
  25.  
  26.         public DoublyLinkedList()
  27.         {
  28.             head = null;
  29.             tail = null;
  30.             Count = 0;
  31.         }
  32.  
  33.         public void AddFirst(T value)
  34.         {
  35.             Node newNode = new Node(value);
  36.  
  37.             if (head == null)
  38.             {
  39.                 head = newNode;
  40.                 tail = newNode;
  41.             }
  42.             else
  43.             {
  44.                 newNode.Next = head;
  45.                 head.Previous = newNode;
  46.                 head = newNode;
  47.             }
  48.  
  49.             Count++;
  50.         }
  51.  
  52.         public void AddLast(T value)
  53.         {
  54.             Node newNode = new Node(value);
  55.  
  56.             if (tail == null)
  57.             {
  58.                 head = newNode;
  59.                 tail = newNode;
  60.             }
  61.             else
  62.             {
  63.                 newNode.Previous = tail;
  64.                 tail.Next = newNode;
  65.                 tail = newNode;
  66.             }
  67.  
  68.             Count++;
  69.         }
  70.  
  71.         public void RemoveFirst()
  72.         {
  73.             if (head == null)
  74.             {
  75.                 throw new InvalidOperationException("List is empty");
  76.             }
  77.  
  78.             if (head == tail)
  79.             {
  80.                 head = null;
  81.                 tail = null;
  82.             }
  83.             else
  84.             {
  85.                 head = head.Next;
  86.                 head.Previous = null;
  87.             }
  88.  
  89.             Count--;
  90.         }
  91.  
  92.         public void RemoveLast()
  93.         {
  94.             if (tail == null)
  95.             {
  96.                 throw new InvalidOperationException("List is empty");
  97.             }
  98.  
  99.             if (head == tail)
  100.             {
  101.                 head = null;
  102.                 tail = null;
  103.             }
  104.             else
  105.             {
  106.                 tail = tail.Previous;
  107.                 tail.Next = null;
  108.             }
  109.  
  110.             Count--;
  111.         }
  112.  
  113.         public bool Contains(T value)
  114.         {
  115.             Node current = head;
  116.  
  117.             while (current != null)
  118.             {
  119.                 if (current.Value.Equals(value))
  120.                 {
  121.                     return true;
  122.                 }
  123.  
  124.                 current = current.Next;
  125.             }
  126.  
  127.             return false;
  128.         }
  129.  
  130.         public void Clear()
  131.         {
  132.             head = null;
  133.             tail = null;
  134.             Count = 0;
  135.         }
  136.  
  137.         public IEnumerator<T> GetEnumerator()
  138.         {
  139.             Node current = head;
  140.  
  141.             while (current != null)
  142.             {
  143.                 yield return current.Value;
  144.                 current = current.Next;
  145.             }
  146.         }
  147.     }
  148. }
  149.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement