Форум программистов, компьютерный форум CyberForum.ru

Удаление значения из односвязного списка - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Извлечь число из строки http://www.cyberforum.ru/cpp-beginners/thread1251997.html
Добрый день. Есть строка, например, вида: field001600.bin Из нее нужно извлечь число 1600 (т.е. без ведущих нулей). Подскажите, как это делается на C++? На PHP это делается за 0.5 сек, например, с помощью регулярных выражений. Спасибо.
C++ Как записать в файл студентов в порядке убывания среднего бала сдачи экзаменов #include<iostream> #include <stdio.h> #include <stdlib.h> #include<iomanip> #include<windows.h> using namespace std; struct stud { char lastname; http://www.cyberforum.ru/cpp-beginners/thread1251989.html
Как лучше изучать программирование? C++
Просто читать и конспектировать или на практике? И где брать легкие задачки по С++? Для начинающих.
Ввод кириллицы в консоли C++
Есть задание создать некоторую базу. Базу эту можно дописывать. Но возникает проблема ввода кириллицы с консоли. Пробовал это решить следующим методом: inline void rus_in (char*& buf) { OemToChar(buf, buf); } На что VS 2012 ругается так:
C++ Обьяснить, допустим ли приведенный код http://www.cyberforum.ru/cpp-beginners/thread1251976.html
Я изучаю С++ по книге Язык программирования С++.Вводный курс. Так вот там задание: Обьяснить, допусти ли этот код? Если да, то почему? Если нет то почему? Я думаю, что не допустим, так как, этот код может функционировать неправильно и будет появляться ошибка. Но загнал код в компилятор и оказалось, что ошибка появляется но код все равно компилируется. Почему так?? Какой правельный ответ?? ...
C++ По окончанию компиляции консоль быстро появляется и исчезает Всем привет. Попал в политех и нужно срочно выучить с++. Вот код он работает. Но по окончанию компиляции консоль быстро появляется и исчезает, как сделать так, что бы консоль не пропадал и я мог увидить результат. Компилирую в VSExpress C++ 2012; #include <iostream> using namespace ::std; int main () { int sum =0, val=1; // продовжувати виконання циклу, поки значення val не... подробнее

Показать сообщение отдельно
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
06.09.2014, 21:53  [ТС]     Удаление значения из односвязного списка
Цитата Сообщение от Renji Посмотреть сообщение
1) После delete pCur цикл продолжает крутиться и выполняет pCur=pCur->pNext (использование указателя на удаленную память).
2) После удаления элемента не обновляется pNext в предшествующем ему элементе.
по первому ошибку понял, а по второму не очень)
за второе замечание это где-то тут налажал?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
else if(pCur==pFirst && pCur->pNext!=NULL)//если элемент первый и не последний
            {
                Elem *NewHead=pCur->pNext;
                delete pCur;
                pFirst=NewHead;
                break;
            }
            else if(pCur!=pFirst && pCur->pNext==NULL)//если элемент последний
            {
                Elem *pLast=pCur;
                delete pCur;
                pLast=NULL;
                break;
            }
Добавлено через 4 минуты
просто я еще не совсем во всем этом розабрался, но как думаю я
тут если елемент первый, я запоминаю адрес второго
C++
1
 Elem *NewHead=pCur->pNext;
а тут удаляю первый и тот что был вторым его делаю первым
C++
1
2
delete pCur;
                pFirst=NewHead;
а тут, я запоминаю адрес последнего, если нужный елемент последний, удаляю его и присваеваю значение 0
C++
1
2
3
Elem *pLast=pCur;
                delete pCur;
                pLast=NULL;
вот только незнаю как быть если элемент по середине где-то или же я что-то не так понимаю

Добавлено через 52 минуты
я тут немного исправил с удалением последнего элемента, но незнаю с удалением первого все нормально?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            else if(pCur==pFirst && pCur->pNext!=NULL)//если элемент первый и не последний
            {
                Elem *NewHead=pCur->pNext;          
                delete pCur;
                pFirst=NewHead;
                break;
            }
            else if(pCur!=pFirst && pCur->pNext==NULL)//если элемент последний
            {
                Elem *pTLast=pFirst;                                
                while(pTLast ->pNext ->pNext != NULL)
                {
                    pTLast = pTLast->pNext;
                }
                Elem *pLast = pTLast; // запомнили адрес предпоследнего (будет последним после удаления)                                
                delete pCur; // удалили последний
                pLast ->pNext = NULL; // предпоследний стал последним
                //n--;
                break;
            }
и если можно подскажите как правильно будет удалить если элемент не первый и не последний, а по середине где-то, вообще не могу сообразить что-то
 
Текущее время: 09:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru