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

Удаление элемента из списка по его номеру - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа вычисления обьема цилиндра и конуса на С++ http://www.cyberforum.ru/cpp-beginners/thread1094634.html
Программа вычисления обьема цилиндра и конуса, которые имеют одинаковую высоту H и одинаковый радиус основания R
C++ system("pause") Подскажите пожалуйста, можно ли заменить сообщение "Для продолжения нажмите любую клавишу" при применении команды system("pause")? http://www.cyberforum.ru/cpp-beginners/thread1094621.html
C++ Бинарная ассоциация
Добрый день есть статья которая расположена по адресу http://habrahabr.ru/post/150041/, пытаюсь разобраться и сделать это на C++, столкнулся с проблемой в коде применительно к бинарной ассоциации: #include <iostream> #include <string.h> using namespace std; struct Date{};
C++ Логический оператор ИЛИ
Всем привет,на днях преподаватель задал интересный вопрос: "Почему в С++ для оператора ИЛИ используют "|| ",а не "|" ?
C++ Одномерный массив. Найти номер первого из элементов, который меньше данное число k http://www.cyberforum.ru/cpp-beginners/thread1094616.html
Дан массив чисел 16,8,35,201,110,17,18,19,20 .Знайти номер первого из элементов, который меньше данное число k.
C++ Функция, находящая периметр равнобедренного треугольника Здравствуйте! Вот пытался сделать задачу: Описать функцию TriangleP(a, h), находящую периметр равнобедренного треугольника по его основанию a и высоте h, проведенной к основанию (a и h — вещественные). С помощью этой функции найти периметр трех треугольников, для которых даны основания и высоты. Для нахождения боковой стороны b треугольника использовать теорему Пифагора: b2 = (a/2)2 + h2. (2 -... подробнее

Показать сообщение отдельно
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.02.2014, 23:03     Удаление элемента из списка по его номеру
вам нужно работать с лист_нодами, а не с лист_хедами:
C++
1
2
3
int list_del(list_head *list, int num)
{
  list_node *pr = 0, *curr = list->head;
итерируетесь до нужного элемента так, чтобы у вас были на руках предыдущий и последующий узел относительно того, который нужно удалить. они нужны, чтобы связать их. иначе список разорвется.
после связки текущий можно удалять.
код скорее всего неверный. по крайней мере смущает строка 8. если не ноль, то ничего не делаем.
наверно наоборот надо. впрочем, сильно не вникал.

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