Первый:
for(i=0;i<n;i++)
{
temp = (node*)malloc(sizeof(node));
printf("Enter the elements of the list.\n");
scanf("%d",&temp->data);
}
Этот цикл повторяется несколько раз, чтобы пользователь мог вводить элементы списка.Но он никогда не добавляет ни одного узла в связанный список.Каждая итерация цикла изменяет temp
, указывая на вновь выделенный узел, но не добавляет узлы в связанный список.
Секунда:
while(temp!=NULL);
Это бесконечныйцикл прямо здесьЕсли temp
не равно NULL
, оно нигде в цикле не изменяется, поэтому оно никогда не станет NULL
.Тебе не нужна эта точка с запятой.
Третье:
node *head = NULL;
void print(node *head){
node *temp = head;
Не делай этого с собой.У вас есть глобальная переменная с именем head
, а у вас есть параметр с именем head
.Когда вы делаете node *temp = head;
, насколько очевидным является , к которому относится head
.Не давайте двум переменным одно и то же имя, если их область видимости перекрывается.
Четвертый:
if(head!=NULL)
{
temp->next = head;
temp = head; // **** here
}
else
{
p = head = temp;
}
return head;
Какой смысл temp = head;
?Значение temp
нигде не доступно.Так что это не может быть правдой.
Наконец:
Я думаю, что вы не задали правильный вопрос, хотя.Вы попросили нас объяснить, где вы идете не так, и я сделал это.Но я не думаю, что это то, что вам действительно нужно.Может быть, вам нужна помощь в разработке алгоритма для решения проблемы?Возможно, задайте новый вопрос, описывающий, каким, по вашему мнению, должен быть алгоритм (просто словами, не нужно использовать код), и попросите помощи в его исправлении.Вы пытаетесь выполнить задачу, которая значительно превышает ваши знания.Это расстраивает и не очень хороший способ научиться программированию.Вы должны серьезно подумать о том, чтобы сначала попытаться выполнить более простые задачи.
Возможно, вы упростили его для упрощения вопроса, но ваш реальный код должен содержать лотов дополнительных проверок и журналов, чтобы помочь вам понять его.,Вход, когда вы вводите функцию.Записывайте каждое решение, которое принимает функция.Журнал, какие функции возвращают.Это поможет вам определить, где фактическая работа программы отклоняется от того, что, по вашему мнению, должно происходить.Или, если хотите, научитесь использовать средства отладки вашей платформы.Таким образом, вы не будете вносить случайные изменения и надеяться, что они заставят все работать, но вместо этого будете знать, где код вначале работает неправильно, и сможете исправить одну вещь за один раз, будучи уверенными, что вы не нарушаете работающие вещи.