// 5.2 - Обработка списка
        static BiList WorkList2(BiList List2)
        {
            bool found = false;

            if (List2 == null)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("Список пуст");
                Console.ResetColor();
                return(List2);
            }
            BiList p = List2;

            while ((p != null))
            {
                if (p.data % 2 == 0)
                {
                    found = true;
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("Первый четный элемент удален из списка\n");
                    Console.ResetColor();
                    if (p.last != null)
                    {
                        if (p.next != null)
                        {
                            p.last.next = p.next;
                            p.next.last = p.last;
                            break;
                        }
                        else
                        {
                            p.last.next = null;
                            break;
                        }
                    }
                    else
                    {
                        if (p.next != null)
                        {
                            List2 = p.next;
                            break;
                        }
                        else
                        {
                            List2 = null;
                            break;
                        }
                    }
                }
                p = p.next;
            }
            if (found == false)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("В списке нет ни одного четного элемента\n");
                Console.ResetColor();
            }
            return(List2);
        }
        // 5.3 - Вывод списка на экран
        static void ShowList2(BiList List2)
        {
            if (List2 == null)
            {
                Console.WriteLine("Список пуст");
                Console.ResetColor();
                return;
            }
            BiList p = List2;

            while (p != null)
            {
                Console.WriteLine(p.data);
                p = p.next;
            }
            Console.WriteLine();
        }
                      last;        //адрес предыдущего элемента

        public BiList(int d)       // Конструктор с параметрами
        {
            data = d;
            next = null;
            last = null;
        }
        // 5.1 - Формирование нового списка
        static BiList FormNewList2(string[] args)
        {
            Console.WriteLine("----------Формирование двунапраленного списка----------------");
            Console.Write("\nВведите число элементов в списке:");
            int    size = IntRND(1, 999999, "Ошибка, при вводе, повторите!");
            int    info = 0, LowLimit = 0, HighLimit = 0;
            BiList beg = null;
            BiList r   = null;
            BiList p   = null;

            do
            {
                Text_Dialog.FormList();
                int how = Search_for_Bugs.ProverkaVvoda();
                switch (how)
                {
                case 1:
                    Console.Write("Введите нижнюю границу:");
                    LowLimit = Int();
                    do
                    {
                        Console.Write("Введите верхнюю границу:");
                        HighLimit = Int();
                        if (HighLimit < LowLimit)
                        {
                            Console.WriteLine("Верхняя граница не может быть меньше нижней!!!");
                        }
                    } while (HighLimit < LowLimit);
                    info = rnd.Next(LowLimit, HighLimit);
                    beg  = MakePoint2(info);
                    r    = beg;
                    for (int i = 1; i < size; i++)
                    {
                        info   = rnd.Next(LowLimit, HighLimit);
                        p      = MakePoint2(info);
                        r.next = p;
                        p.last = r;
                        r      = p;
                    }
                    Console.WriteLine("Список сформирован");
                    break;

                case 2:
                    Console.WriteLine("Введите элемент строкового типа под номером 1");
                    info = Int();
                    beg  = MakePoint2(info);
                    r    = beg;
                    for (int i = 1; i < size; i++)
                    {
                        Console.WriteLine("Введите элемент строкового типа под номером {0}", i + 1);
                        info   = Int();
                        p      = MakePoint2(info);
                        r.next = p;
                        p.last = r;
                        r      = p;
                    }
                    Console.WriteLine("Список сформирован");
                    break;

                case 9:
                    Console.Clear();
                    Main(args);
                    break;

                case 0:
                    Console.Clear();
                    Thread.Sleep(900);
                    Console.WriteLine(" ");
                    Console.WriteLine("Завершение работы...");
                    Environment.Exit(0);
                    break;

                default:
                    Text_Dialog.MainError();
                    continue;
                }
            } while (!true);
            return(beg);
        }
        //-----------------------------------------------------------------------------------------------------------
        //---Двунаправленный список----------------------------------------------------------------------------------
        #region
        static void PointTwo(string[] args)
        {
            int    SwitchNumber;
            BiList List2 = null;

            do
            {
                Console.WriteLine("\n--------------------------------------------------------");
                Console.WriteLine("| Выберите следующее действие:                         |");
                Console.WriteLine("| 1) Сформировать список                               |");
                Console.WriteLine("| 2) Удалить из текущего списка первый четный элемент  |");
                Console.WriteLine("| 3) Вывести текущий список на экран                   |");
                Console.WriteLine("| 9) В начало                                          |");
                Console.WriteLine("| 0) Выход из консоли                                  |");
                Console.WriteLine("--------------------------------------------------------");
                Console.Write("Действие: ");
                SwitchNumber = Search_for_Bugs.ProverkaVvoda();
                switch (SwitchNumber)
                {
                case 1:
                    Console.Clear();
                    List2 = FormNewList2(args);
                    Console.Clear();
                    Console.WriteLine("----------Двунапраленный список----------------\n");
                    ShowList2(List2);
                    Console.WriteLine("-----------------------------------------------");
                    break;

                case 2:
                    Console.Clear();
                    Console.WriteLine("----------Двунапраленный список----------------\n");
                    List2 = WorkList2(List2);
                    ShowList2(List2);
                    Console.WriteLine("-----------------------------------------------");
                    do
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("\nУдаление уже произведено!!!");
                        Console.ResetColor();
                        Console.WriteLine("\n--------------------------------------------------------");
                        Console.WriteLine("| Выберите следующее действие:                         |");
                        Console.WriteLine("| 1) Сформировать новый список                         |");
                        Console.WriteLine("| 2) Вывести текущий список на экран                   |");
                        Console.WriteLine("| 9) В начало                                          |");
                        Console.WriteLine("| 0) Выход из консоли                                  |");
                        Console.WriteLine("--------------------------------------------------------");
                        Console.Write("Действие: ");
                        SwitchNumber = Search_for_Bugs.ProverkaVvoda();
                        switch (SwitchNumber)
                        {
                        case 1:
                            Console.Clear();
                            List2 = FormNewList2(args);
                            Console.Clear();
                            Console.WriteLine("----------Двунапраленный список----------------\n");
                            ShowList2(List2);
                            Console.WriteLine("-----------------------------------------------");
                            break;

                        case 2:
                            Console.Clear();
                            Console.WriteLine("----------Двунапраленный список----------------\n");
                            ShowList2(List2);
                            Console.WriteLine("-----------------------------------------------");
                            break;

                        case 9:
                            Console.Clear();
                            Main(args);
                            break;

                        case 0:
                            Console.Clear();
                            Console.WriteLine(" ");
                            Console.WriteLine("Завершение работы...");
                            Thread.Sleep(900);
                            Environment.Exit(0);
                            break;

                        default:
                            Text_Dialog.MainError();
                            continue;
                        }
                    } while (!true);
                    break;

                case 3:
                    Console.Clear();
                    Console.WriteLine("----------Двунапраленный список----------------\n");
                    ShowList2(List2);
                    Console.WriteLine("-----------------------------------------------");
                    break;

                case 9:
                    Console.Clear();
                    Main(args);
                    break;

                case 0:
                    Console.Clear();
                    Console.WriteLine(" ");
                    Console.WriteLine("Завершение работы...");
                    Thread.Sleep(900);
                    Environment.Exit(0);
                    break;

                default:
                    Text_Dialog.MainError();
                    continue;
                }
            } while (true);
        }
        static BiList MakePoint2(int d)
        {
            BiList p = new BiList(d);

            return(p);
        }