Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
bobbyserf
1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 105
1

Удаление из двунаправленного списка

05.03.2015, 22:59. Просмотров 771. Ответов 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <cstring>
using namespace std;
struct Node
{
int x;
Node *Next, *Prev;
};
typedef Node *PNode;
 
void Add(int x, PNode &Head, PNode &MyNode)
{
 PNode Temp;
if (Head==NULL)
{
Head=new(Node);
MyNode=Head;
Head->Next=NULL;
}
else
{ 
Temp=new(Node);
MyNode->Next=Temp;
MyNode=Temp;
MyNode->Next=NULL;
}
cin>>MyNode->x;
}
 
void Show(PNode &Head)
{
PNode MyNode;
MyNode=Head;
while (MyNode!=NULL)
{
cout<<MyNode->x<<" ";
MyNode=MyNode->Next;    
}
}
 
void Delete(PNode &Head, PNode &Tail, PNode OldNode)
{ 
 if (Head == OldNode) 
 { 
 Head = OldNode->Next; 
 if ( Head ) Head->Prev = NULL; 
 else Tail = NULL;  
 } 
 else 
 { 
 OldNode->Prev->Next = OldNode->Next; 
 if ( OldNode->Next ) 
 OldNode->Next->Prev = OldNode->Prev; 
 else
 {
 Tail = OldNode->Prev; 
 Tail->Next=NULL; 
 } 
 }
 delete OldNode; 
}
 
void ClearNode(PNode &Head)
{
PNode MyNode;
while (Head!=NULL)
{
MyNode=Head->Next;
delete Head;
Head=MyNode;
}
}
 
 
int main()
{
PNode Head, MyNode, Tail, OldNode;
Head=NULL; MyNode=NULL; Tail=NULL; OldNode=NULL;
for (int i=0;i<6;i++) 
Add(i,Head,MyNode);
Delete(Head,Tail, OldNode);
Show(Head);
ClearNode(Head); 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2015, 22:59
Ответы с готовыми решениями:

Получить указатель на элемент двунаправленного списка, добавить значение в начало списка и очистить его
Нужно создать двунаправленный список //вроде так, но не уверен struct...

Шаблон двунаправленного списка
Добрый день! Пишу программу &quot;библиотека&quot;, которая включает в себя типы данных...

Сортировка двунаправленного списка
Посоветуйте пожалуйста адекватный метод сортировки двунаправленного списка. Я...

Реализация Двунаправленного списка
Ребят, что он хочет от меня, ошибка компиляции, понять не могу в чем проблема,...

Очередь из двунаправленного списка
Вот мой двусвязный список : struct Num { int number; bool ring;...

4
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,950
06.03.2015, 09:05 2
Цитата Сообщение от bobbyserf Посмотреть сообщение
вылетает.
пальцем в небо - в OldNode лежит NULL - зачем вы пытаетесь удалить OldNode?
0
bobbyserf
1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 105
06.03.2015, 10:06  [ТС] 3
всё равно что-то не так.
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,950
06.03.2015, 10:21 4
Цитата Сообщение от bobbyserf Посмотреть сообщение
что-то не так
может быть. это ведь что-то. знаю только что если заменить Delete(Head,Tail, OldNode) на Delete(Head,Tail, Head), то не вылетает
1
lKORENl
28 / 28 / 15
Регистрация: 26.11.2014
Сообщений: 57
Завершенные тесты: 1
06.03.2015, 12:42 5
Расковырял таки
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
struct Node
{
int x;
Node *Next, *Prev;
};
typedef Node *PNode;
 
void Add(int x, PNode &Head, PNode &MyNode, PNode &Tail)
{
 PNode Temp;
if (Head==NULL)
{
Head=new(Node);
cin>>Head->x;
Head->Next=NULL;
Head->Prev=NULL;
Tail = NULL;
}
else
{ 
Temp=new(Node);
cin >> Temp->x;
Temp->Prev = Tail;
Temp->Next = NULL;
if(Tail == NULL)
    {
    
    Temp->Prev = Head;
    Head->Next = Temp;
 
    }
else
{
    Temp->Prev = Tail;
    Tail->Next = Temp;
}
 
Tail = Temp;
 
}
 
}
 
void Show(PNode &Head)
{
PNode MyNode;
MyNode=Head;
while (MyNode!=NULL)
{
cout<<MyNode->x<<" ";
MyNode=MyNode->Next;    
}
}
 
void Delete(PNode &Head, PNode &Tail, PNode OldNode)
{ 
    if (OldNode == Head) 
     { 
         OldNode = Head;
         Head = OldNode->Next; 
          Head->Prev = NULL; 
 
         
     } 
 
    else if( OldNode == Tail)
    { 
        Tail = OldNode->Prev;
        Tail->Prev = OldNode->Prev->Prev;
        OldNode->Prev->Next = NULL;
    
    }
    else
    {
             OldNode->Prev->Next = OldNode->Next; 
             OldNode->Next->Prev = OldNode->Prev; 
        
     }
 delete OldNode; 
}
 
void ClearNode(PNode &Head)
{
PNode MyNode;
while (Head!=NULL)
{
MyNode=Head->Next;
delete Head;
Head=MyNode;
}
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    
PNode Head, MyNode, Tail, OldNode;
Head=NULL; MyNode=NULL; Tail=NULL; OldNode=NULL;
 
for (int i=0;i<6;i++) 
    Add(i,Head,MyNode,Tail);
 
 
OldNode = Head;
int k = 6;                   // елемент который удалить 
if(k>1)
{
for (int i = 0; i < k-1; i++)  
{
    
    OldNode = OldNode->Next; // итератор
}
}
 
Delete(Head,Tail, OldNode);
Show(Head);
ClearNode(Head); 
 
cout  << endl;
}
1
06.03.2015, 12:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2015, 12:42

Сортировка двунаправленного списка
Помогите отсортировать составленный список по определенному полю, я пробовал...

Swap для двунаправленного списка
Поменять просто значения узлов, не интересно. Я запутываюсь с ссылками....

Постраничный вывод записей двунаправленного списка
Здравствуйте! Проблема в чём - курсовик, постраничный вывод записей...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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