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

Связанный список, найти ошибку - C++

Восстановить пароль Регистрация
 
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,220
22.08.2013, 16:26     Связанный список, найти ошибку #1
http://iguania.ru/stati-po-programmi...iy-spisok.html

Вот статья про связанный список, все доступно и понятно написано, я взял из нее первый список, который добавляет узлы в конец списка, переписал, вроде как все строчка в строчку, кроме конечно некоторых названий переменных, классов, все работает, но мне не выводит последний узел тот, у которого указатель next = NULL, при это все тоже самое из статьи работает, помогите найти ошибку, вот код:

Кликните здесь для просмотра всего текста
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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
class MyNote
{
public:
int var; /* содержит значение */
MyNote *next; /* содержит адрес на следующий узел (объект класса MyNote) */
 
};
 
class MyList
{
private:
MyNote *head; /* начало связанного списка (первый объект класса MyNote) */
 
public:
MyList() { head = NULL; }
 
void add_MyNote(int rhs)
/* функция-элемент добавляющая новый узел (объект класса MyNote) в список */
{ 
MyNote *tempOne = new MyNote; /* динамически создаем новый узел (объект класса MyNote) */
tempOne->var = rhs; /* присваиваем var из класса MyNote значение */
tempOne->next = NULL; 
/* присваиваем указателю на следующий узел значение NULL т.е. 0,
мы только добавляем узел, он будет в списке последний, за ним ни чего нет, 
т.е. указывать не на что, по этому указываем на NULL, что будет означает 
что это последний узел списке */
 
/* теперь проверяем, является ли данный узел (объект класса MyNote) первым в программе */
if (head == NULL)
{ head = tempOne; }
 
/* если создаваемый  узел (объект класса MyNote) не является первым узлом в программе */
else
{ 
MyNote *tempTwo = head;
/* создаем вспомогательный объект и присваиваем ей указатель на начало списка */
 
/* ищем при помощи цикла (от начала списка), предпоследний узел (объект класса MyNote)
он должен содержать указатель next равный NULL, т.к. он до этого был последний узлом
для того, что бы найти созданный в предыдущий раз узел (объект класса MyNote) 
и присвоить его указателю next за место NULL, адрес на новый созданный узел (объект класса MyNote) */
while (tempTwo->next != NULL)
{
tempTwo = tempTwo->next;
/* переход к следующему узлу (объект класса MyNote),
для поиска next равного NULL */
}
/* после того как мы нашли предпоследний узел (объект класса MyNote), 
меняем его указатель next на последний узел (объект класса MyNote) */
tempTwo->next = tempOne;
}
}
 
 
void print_MyList() const 
/* функция-элемент выводящая на экран связанный список */
{ 
MyNote *temp = head;
 
/* выводим все значения хранящиеся в списке, пока не дойдем до узла 
с указателем на NULL, при этом сам узел с NULL (последний в списке) выведен не будет! */
while (temp->next != NULL)
{
cout << temp->var << endl;
temp = temp->next;
}
}
};
 
 
int main()
{
setlocale(LC_ALL,"");
 
MyList test;
 
test.add_MyNote(7); 
test.add_MyNote(4); 
test.add_MyNote(5); 
test.add_MyNote(12); 
test.add_MyNote(3); 
 
test.print_MyList();
 
system("pause");
return 0;
}


как я подозреваю проблема в функции print_MyList() и его цикле в строчках 67-71, но в статье точно такой же цикл и все нормально работает.


PS ну и по описанию, я все правильно пишу?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2013, 16:26     Связанный список, найти ошибку
Посмотрите здесь:

C++ Однонаправленный связанный список
Связанный двусторонний список C++
C++ Связанный список.
C++ Связанный список
Связанный список C++
Связанный список C++
C++ Связанный список
Создать связанный список C++
И снова связанный список C++
C++ Связанный список. List, не могу найти ошибку в куске кода
C++ Связанный список (ООП)
Циклический связанный список C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
22.08.2013, 17:30     Связанный список, найти ошибку #2
VLK, 67 строка: while (temp != NULL)
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,220
22.08.2013, 17:46  [ТС]     Связанный список, найти ошибку #3
anmartex, но почему в коде статьи все работает нормально?
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
22.08.2013, 17:52     Связанный список, найти ошибку #4
Цитата Сообщение от VLK Посмотреть сообщение
anmartex, но почему в коде статьи все работает нормально?
Потому что там такой ошибки нет. Будьте внимательней.
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,220
22.08.2013, 17:56  [ТС]     Связанный список, найти ошибку #5
anmartex, спасибо, теперь разглядел, так тяжело находить собственные ошибки, просто в упор ни видишь..
Yandex
Объявления
22.08.2013, 17:56     Связанный список, найти ошибку
Ответ Создать тему
Опции темы

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