С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Двусвязные списки, не могу добавить узел с конца - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Быстрая сортировка Хоара http://www.cyberforum.ru/cpp-beginners/thread261701.html
Быстрая сортировка Хоара (QSort) разбивает массив в ходе сортировки до тех пор, пока размер частичного подмассива не станет равен 1 элементу. Есть подозрение, что лучше бы она не доводила ...
C++ как выглядит в си++ Program kursak; Const Nmax = 5; {Максимальный размер массива} Type Matrix = array of integer;; m:=m; m:=s; end; end http://www.cyberforum.ru/cpp-beginners/thread261679.html
После каждого вхождения символа C в строку S вставить строку S0 C++
Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0. #include <iostream> #include <string.h> using namespace std; const int N=30;
C++ Моделирование алгоритмических вычислений на машинах произвольного доступа
Построить программу для машины произвольного доступа, реализующая вычисления следующих функций, и найти их значения для заданных неотрицательных аргументов. Входные данные заносятся в регистры МДД...
C++ Вычисление значений функции http://www.cyberforum.ru/cpp-beginners/thread261632.html
Доброго времени суток! Помогите с одной задачей.Надо построить таблицу значений(функция y=ln(x/(x-2))). Если в некоторой точке x функция не определена, то вывести на экран сообщение об этом.Я...
C++ Определить истинные следующие утверждения: Определить истинные следующие утверждения: a) «любое выражение в Си может быть преобразован в оператор добавлением к нему точки с запятой (;)» b) «пустой оператор в Си - это отсутствие каких-либо... подробнее

Показать сообщение отдельно
Dexter
286 / 146 / 16
Регистрация: 13.10.2009
Сообщений: 164
22.03.2011, 13:40
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
list *insert(int val, int poz, list *head){
    list *pointer = new list;
    pointer->data = val;
    pointer->next = NULL;
    pointer->prev = NULL;
    list *node=head;
    // Если список пуст
    if(head == NULL){
        return pointer;
    }
    int i=0;
    while(i<poz&&node->next!=NULL)//идем до нужной позиции
    {
        i++;
        node=node->next;
    }
        if(node->next == NULL&&i!=poz){//если позиция больше чем количество элементов
            node->next=pointer;
            pointer->prev=node;
            return head;
        }
        else//если нужно вставить перед этим элементом
        {
            pointer->next=node;
            pointer->prev=node->prev;
            if(node->prev)node->prev->next=pointer;
            node->prev=pointer;
            if(pointer->prev)return head;//если были предыдущие, то возвращаем начало списка
            else return pointer;//если нету, то это стало головой
        }
}
А шаги такие:
1)смотрим пустой список или нет, если пустой то делаем наш элемент головой
2)Пытаемся дойти до нужной позиции,
a)если позиция оказывается больше чем наше количество элементов, то добавляем его в конец
б)если позиция внутри, то вставляем узел в нужное место, для этого определяем prev и next элементы нашего узла, prev следующего и next предыдущего

Выше показано как можно такое сделать. (первый элемент, естественно 0-ой)
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.