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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2018, 18:38   #1
reeeer
 
Регистрация: 10.11.2018
Сообщений: 8
По умолчанию Инвертировать односвязный список

вот программа по инвертированию списка , но почему-то она не работает
подскажите что не так
Код:
typedef struct List
{
	int info;
	struct List* next;
} List;

List *First, *Last;//указатель на первый и последний эл

// пуш
void push(int inf)
{
	struct List* el;

	// выделение памяти
	el = (struct List*)malloc(sizeof(struct List));
	if (el == NULL)
	{
		printf("Не удалось выделить память под элемент списка.\n");
		return;
	}

	el->info = inf;
	el->next = NULL;

	if (First == NULL)
		First = Last = el;
	else
	{
		Last->next = el;
		Last = Last->next;
	}
}


void reverse(struct List ** head)//инвертирование списка
{
	if (*head == NULL) return;
	struct List * curr, *next, *prev = NULL;
	curr = *head;
	while (curr)
	{
		next = curr->next;
		curr->next = prev;
		prev = curr;
		curr = next;
	}
	*head = prev;
}



int main(void)
{
	int inf, sum;
	List *el, *tmp;
	setlocale(LC_ALL, "Russian");
	First = Last = NULL;

	//заполнение списка
	printf("Введите элементы списка (окончание ввода-любой символ, кроме цифры):\n");
	while (scanf_s("%d", &inf) != 0) {
		push(inf);

	}
	

	reverse(First);//инвертирование
	

	for (el = First; el != NULL; el = el->next)//вывод
		
			printf("%d", el->info);




	
	// фриии
	for (el = First; el != NULL;)
	{
		tmp = el;
		el = el->next;
		free(tmp);
	}

	return 0;
}
reeeer вне форума Ответить с цитированием
Старый 22.12.2018, 19:23   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

А оно вообще у вас компилится?

Код:
reverse(First);//инвертирование
Код:
void reverse(struct List ** head)
Код:
List *First
Не смущает , что кол-во звездочек различно?
p51x вне форума Ответить с цитированием
Старый 22.12.2018, 20:50   #3
reeeer
 
Регистрация: 10.11.2018
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А оно вообще у вас компилится?
как ни странно, да
reeeer вне форума Ответить с цитированием
Старый 23.12.2018, 01:10   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Сообщение от reeeer Посмотреть сообщение
как ни странно, да
Код не должен компилироваться, в нём ошибка.

В качестве параметра должен передаваться указатель на указатель. Поправьте код и всё будет ок:
Код:
...
reverse(&First);//инвертирование
...
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часть кода сделал. Односвязный список без заглавного звена. Динамическая память. Перевернуть список и считать в обратном порядке. Varner Общие вопросы Delphi 5 19.05.2016 17:30
Инвертировать односвязный список SsAn Visual C++ 0 22.05.2014 20:34
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Необходимо реализовать классы, односвязный список для хранения целых чисел, односвязный список для хранен lineico Помощь студентам 2 09.05.2011 17:45
Инвертировать связный список levandowskiy Общие вопросы C/C++ 2 21.08.2009 15:20