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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Виталий123
-96 / 5 / 2
Регистрация: 29.11.2011
Сообщений: 84
#1

Как удалить узел в связном списке? - C++

28.09.2012, 00:45. Просмотров 774. Ответов 4
Метки нет (Все метки)

привет всем! подскажите пожалуйста в подробностях как происходит удаление узла в алгоритме связного списка ??
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
32
33
34
35
36
37
38
39
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <locale.h>
 
using namespace std;
 
struct node
{
    int item; node* next;
    static int count;
    node(int x, node* t): item(x), next(t) { count++; }
};
 
int node::count(0);
 
typedef node* link;
 
int _tmain(int argc, char* argv[])
{
    setlocale(LC_ALL, "");
    cout<<"Задача Иосифа."<<endl;
    int i, N = atoi(argv[1])
        , M = atoi(argv[2]);
    link t = new node(1, 0);
    t->next = t;
    link x = t;
    for(i = 2; i <= N; i++)
        x = (x->next = new node(i, t));
    while(x != x->next)
    {
        for(i = 1; i < M; i++) x = x->next;
        x->next = x->next->next; // удалить узел
    }
    cout<<x->item<<endl;
    cout<<"Количество узлов равно "<<node::count<<endl;
    _getch();
    return 0;
}
буду очень благодарен !
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2012, 00:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как удалить узел в связном списке? (C++):

Как в связном списке обратиться к элементу по адресу - C++
как в связном списке обратиттся к элементу по нужному адресу? Добавлено через 46 минут как в связном списке обратится к нужному...

Как в связном списке присвоить NULL полю next, если тип этого поля не указатель, а ссылка? - C++
Друзья! В общем, надо реализовать связный список и понятно, последний элемент должен содержать адрес NULL, вот ломаю голову как это...

Очередь на связном списке - C++
OldTail-&gt;next-&gt;tail; ругается на эту строчку, пишет class QueueNode не содержит члена tail и просмотрите, пожалуйста, остальной код....

непонятка в связном списке - C++
есть 2 конструктора - list(const str&amp;) и list() если в main использую 1ый конструктор, то всё работает, если 2ой - ошибка, всякие там...

Пузырёк на связном списке - C++
Здравствуйте! Не могли Вы подсказать, почему после первого прохождения по списку все остается как было. Т.е. элементы переставляются, но...

Удаление головы в Связном списке C++ - C++
Ребят, в чем ошибка? Вроде все проверил, но почему-то вылетает с ошибкой при попытке удалении головы списка, не могу понять в чем проблема....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
28.09.2012, 01:17 #2
Создается временный указатель, куда записывается адрес удаляемого объекта.
В указателе предыдущего объекта на удаляемый присваивается адрес следующего после удаляемого.
Удаляется объект по временному указателю.
2
Виталий123
-96 / 5 / 2
Регистрация: 29.11.2011
Сообщений: 84
28.09.2012, 19:15  [ТС] #3
veverix, вроде бы понятно... и еще вопрос , затем нужно так писать x->next->next; (x->next = x->next->next) что именно делает самый правый next ?
0
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
29.09.2012, 17:44 #4
Обьясню на примере.

Имеется направленный список, в каждом элементе которого записан адрес следующего.

1 > 2 > 3 > 4 > 5

Нужно удалить элемент номер 3. Если мы его просто удалим, то доступа к элементам 4 и 5 мы не получим, потому что адрес 4 будет утерян. Посему, мы сначала записываем в качестве следующего после 2 4 элемент, адрес третьего сохранив во временной адресной переменной. После чего по этому адресу удаляем 3 элемент.
2
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
29.09.2012, 17:54 #5
1 -> 2 -> 3 -> 4 -> 5
Удалить 3.
1->2->??? ???->4->5
запоминаем адрес 3
temp = 3;
1->2->3->4->5 и 1->2->temp->4->5 одинаковы
после 2 ссылаемся на 4, при этом 3-й элемент не будет потерян, на него так же ссылается temp;
1->2->4->5
2->next = 4;
удаляем 3;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2012, 17:54
Привет! Вот еще темы с ответами:

Исправить ошибки в связном списке - C++
Почти готовая лабораторка, но не хватает несколько деталей. Помогите решить проблему, пожалуйста! Задание : 1. Создание списка из...

Алгоритм Дейкстры в связном списке + файлы. - C++
Задача такова : Имеются n городов. Некоторые из них соединены дорогами известной длины. Найти кратчайшие маршруты из заданного города в...

Copy-Constructor В Шаблонном Связном списке - C++
Скажіте пожалуйста где тут ошыбка? Добавлено через 49 секунд Ран тайм ерор кидает в копи конструкторе 100% вот код ...

Передать значение из одной функции в другую функцию в связном списке - C++
Как можно передать значение из одной функции в другую функцию в связном списке? Например у меня есть функция поиска максимального...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.09.2012, 17:54
Ответ Создать тему
Опции темы

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