Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2016, 19:49   #1
AggReex
Новичок
Джуниор
 
Регистрация: 15.08.2016
Сообщений: 2
Восклицание Не добавляется элемент в конец односвязного списка

Крч, вот такие дела. Сам список:
Код:
struct List {
	int key;
	List* next;
};
-----------------------------------------------------------------------------------------------
А вот функция добавления в конец списка:
Код:
void Add_end(List** begin, const int l) {
	List* p = *begin;
	List* t = new List;
	t->key = l;
	t->next = NULL;
	while (!p->next == NULL) {
		p = p->next;
	}
	p->next = t;
	cout << p->next << " -> " << t << " " << t->key << endl;
}
-----------------------------------------------------------------------------------------------
А вот сам код:
Код:
#include <iostream>
#include <conio.h>

using namespace std;

struct List {
	int key;
	List* next;
};

void Init(List** begin) {
	(*begin)->next = NULL;

	List* end = *begin;

	int mas[5] = { 1,2,3,4,5 };

	for (int i = 0; i < 5; i++) {
		end->next = new List;
		end->key = mas[i];
		end = end->next;
		end->next = NULL;

	}
}

void Print(List* begin) {
	List* t = begin;
	while (!t->next == NULL) {
		cout << t->key << " -> ";
		t = t->next;
	}
	cout << "NULL" << endl;
}

void Add_begin(List** begin, const int a) {
	List* t = new List;
	t->key = a;
	t->next = *begin;
	*begin = t;
}

void Add_end(List** begin, const int l) {
	List* p = *begin;
	List* t = new List;
	t->key = l;
	t->next = NULL;
	while (!p->next == NULL) {
		p = p->next;
	}
	p->next = t;
}

int main() {
	int b = 0, a = 6;
	List* begin = new List;
	Init( &begin);
	Print( begin);
	Add_begin( &begin, b);
	Print(begin);
	Add_end(&begin, a);
	Print(begin);

	_getch();
}
-----------------------------------------------------------------------------------------------
Добавление элемента в начало робит отлично. А вот конец...
Мне выдает следующее:
0 -> 1 -> 2 -> 3 -> 4 -> 5 -> -842150451 -> NULL

Вот что интересно: если вызвать функцию добавления в конец второй третий рах т.д. , тогда будет работать. Но первый раз всегда выдает это


______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 15.08.2016 в 20:45.
AggReex вне форума Ответить с цитированием
Старый 15.08.2016, 20:17   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Условие в цикле странное, видимо должно быть
Код:
while (p->next)
или
Код:
while (p->next != NULL)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.08.2016, 20:38   #3
AggReex
Новичок
Джуниор
 
Регистрация: 15.08.2016
Сообщений: 2
По умолчанию

Мне уже говорили, я исправил, не помогло
AggReex вне форума Ответить с цитированием
Старый 15.08.2016, 23:15   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Создание неправильное. В main 1 элемент уже создаётся, а затем в Init ёщё 5 раз, а надо 4. В итоге 5-ый элемент списка содержит неизвестно что, да и ещё концом не считается
Код:
	for (int i = 0; i < 4; i++) {
		end->next = new List;
		end->key = mas[i];
		end = end->next;
	}
	end->key = mas[4];
	end->next = NULL;
Ну и условие просмотра изменятся на
Код:
void Print(List* begin) {
	List* t = begin;
	while (!t == NULL) {
или лучше
Код:
t != NULL
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена второго элемента односвязного списка на предпоследний элемент s24g Паскаль, Turbo Pascal, PascalABC.NET 6 17.11.2014 18:17
сортировка односвязного списка Levenyatko Общие вопросы C/C++ 0 05.07.2012 22:12
Не добавляется элемент в map -LeV- Общие вопросы C/C++ 3 22.02.2011 19:36
Не добавляется элемент в очередь Дырдин Общие вопросы C/C++ 2 22.04.2010 07:31
Мин. элемент. односвязного списка в СИ Sultan237 Общие вопросы C/C++ 0 22.03.2010 23:24