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

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

Войти
Регистрация
Восстановить пароль
 
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
#1

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

22.08.2013, 16:26. Просмотров 270. Ответов 4
Метки нет (Все метки)

http://iguania.ru/stati-po-programmirovaniiu/svyazanniy-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 ну и по описанию, я все правильно пишу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2013, 16:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Связанный список, найти ошибку (C++):

Связанный список. List, не могу найти ошибку в куске кода - C++
Программа работает, но работает не правильно. Суть функции, создается список, заполняется, потом надо по нужным условиям найти элементы и...

Связанный список. Создать, записать в связный список последовательность слов,обозначающих месяцы года,заданных пользователем - C++
Создать связанный список.Кроме информационных полей он должен обязательно содержать указатели на предыдущий и следующий за ним...

Связанный список - C++
ребят,нужна помощь. короче дело в том,что нужно &quot;то есть тебе нужно поменять местами ссылки друг на друга.. то есть когда ты считываешь...

Связанный список - C++
Доброе утро есть ли у кого пример Связанного списка. И чем он вообще отличаетьсяот массива кроме того , что связанный список динамичен.

Связанный список - C++
Не могу обратиться к методу класса Node хотя они выраженны как public: void addNode(int d); void printList(); #include&lt;iostream&gt; ...

Связанный список - C++
Всем доброго время суток, написать программу демонстрации связанного списка, где PART - (ДЕТАЛЬ) содержит номер детали и остальную...

4
anmartex
...
1706 / 1199 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
22.08.2013, 17:30 #2
VLK, 67 строка: while (temp != NULL)
1
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
22.08.2013, 17:46  [ТС] #3
anmartex, но почему в коде статьи все работает нормально?
0
anmartex
...
1706 / 1199 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
22.08.2013, 17:52 #4
Цитата Сообщение от VLK Посмотреть сообщение
anmartex, но почему в коде статьи все работает нормально?
Потому что там такой ошибки нет. Будьте внимательней.
1
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
22.08.2013, 17:56  [ТС] #5
anmartex, спасибо, теперь разглядел, так тяжело находить собственные ошибки, просто в упор ни видишь..
0
22.08.2013, 17:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2013, 17:56
Привет! Вот еще темы с ответами:

Связанный список. - C++
Компилятор ругается на строку 169 In member function `virtual Node* HeadNode::Insert(Data*)': 169 argument of type...

Циклический связанный список - C++
Доброго времени суток. Пытаюсь посчитать количество значений в циклическом списке. Но всегда получается на 1 значение меньше. Или я должен...

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

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


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

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

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