Добавление и удаление элемента в двунаправленном списке

Немогу вставить елемент после каждого отрецательного елемента в двунаправленом списке

class Program
{
    //структура даних для організації роботи з двозв'язним списком
    public unsafe struct Double_List
    {
        public int Data; //інформаційне поле
        public Double_List* Next; //адресне поле для зв'язку с наступним елементом
        public Double_List* Prev; //адресне поле для зв'язку с попереднімелементом
    }
    static unsafe void Main(string[] args)
    {
        //покажчик на перший елемент списку
        Double_List* Head = null;
        //покажчик на останній элемент списку (за необхідностю)
        Double_List* Last = null;
        //Введення першого елемента списку
        Console.WriteLine("Признак кінця послідовності - 0.\n ВВедіть елемент: ");
        int n = int.Parse(Console.ReadLine());
        int count = 0;  //Лічильник елементів списку
        while (n != 0) //Поки не введено признака кінця послідовності
        {
            //Створюємо новий елемент списку
            Double_List* Current = stackalloc Double_List[sizeof(Double_List)];
            Current->Data = n; //Заносимо значення в інформаційне поле
            Current->Next = null; //В адресне поле заносимо 0
            Current->Prev = null;

            if (Head == null)  //якщо елемент перший,  
            {                  //він становиться головою та хвостом списку
                Head = Last = Current;

            }
            else
            {
                //Додавання елемента на початок списку
                Current->Next = Head;
                Head->Prev = Current;
                Head = Current;
            }
            //Введення нового елемента
            Console.WriteLine("Признак кінця послідовності - 0.\n ВВедіть елемент: ");
            n = int.Parse(Console.ReadLine());
            count++;
        }
        Console.WriteLine("Кількість елементів в списку: {0}", count);
        Console.WriteLine("Виведення елементів  з початку списку");
        //Виведення елементів  з початку списку
        Double_List* Cur = Head;
        while (Cur != null) //Поки не кінець списку
        {
            Console.WriteLine(Cur->Data); //Виведення значення інформаційного поля
            Cur = Cur->Next; //Перехід до наступного елемента
        }

        Console.WriteLine("Виведення елементів  з кінця списку");
        //Виведення елементів  з кінця списку
        Cur = Last;
        while (Cur != null) //Поки не кінець списку
        {
            Console.WriteLine(Cur->Data); //Виведення значення інформаційного поля
            Cur = Cur->Prev; //Перехід до наступного елемента
        }

        Double_List* NewItem = stackalloc Double_List[sizeof(Double_List)];
        NewItem->Next = null; //В адресне поле заносимо 0
        NewItem->Data = 66;
        Double_List* Curr = Head;

        for (int i = 0; i < count - 1 && Curr != null; i++)
        {
            Cur = Curr->Next;
            if (Curr->Next != null && Curr->Next->Data == 3)
            {
                Curr->Next->Prev = NewItem;
                NewItem->Next = Curr->Next;
                Curr->Next = NewItem;
                NewItem->Prev = Curr;
            }
        }
        Cur = Head;
        while (Cur != null) //Поки не кінець списку
        {
            Console.WriteLine(Cur->Data); //Виведення значення інформаційного поля
            Cur = Cur->Next; //Перехід до наступного елемента
        }
        Console.WriteLine("ВВедіть номер  елемента для виключення: ");
        // Place = int.Parse(Console.ReadLine());
        Double_List* Curr1 = Head;
        Console.WriteLine("Пiсля видалення елементiв:");
        // Single_List* Curr1 = Head;


        if (Curr1->Data == 2 && Curr1 == Head)
        {
            Head = Head->Next;
            Head->Prev = null;
        }
        Curr1 = Head;
        while (Curr1->Next != null)
        {
            if (Curr1->Data == 2)
            {
                Curr1->Prev->Next = Curr1->Next;
                Curr1->Next->Prev = Curr1->Prev;
            }
            Curr1 = Curr1->Next;
        }
        //виключення останнього елемента
        if (Curr1->Next == null && Curr1->Data == 2)
        {
            Curr1->Prev->Next = null;
            Last = Curr1->Prev->Next;
        }

        //Виведення елементів списку
        Cur = Head;
        while (Cur != null) //Поки не кінець списку
        {
            Console.WriteLine(Cur->Data); //Виведення значення інформаційного поля
            Cur = Cur->Next; //Перехід до наступного елемента
        }
        Console.ReadLine();

    }
}

У меня вставляеться элемент перед ПЕРВЫМ ОТРЕЦАТЕЛЬНИМ элементом, а нужно чтоб ПОСЛЕ КАЖДОГО, помогите пожалуйста


Ответы (0 шт):