Проблема здесь:
if(head==0)
{
head=temp=newnode;
}
else
temp->next=newnode; /** **this is the problem** **/
temp=newnode; /** temp=newnode works but temp=temp->next doesn't**/
Отступ не определяет структуру. Вы должны заключить несколько инструкций в блок, чтобы сгруппировать их в предложении else
. Как закодировано, temp=newnode;
выполняется безоговорочно после теста, что не является проблемой, но избыточно при head=temp=newnode
.
. Обратите также внимание, что choice
не инициализируется при первом тестировании.
Вот исправленная версия:
#include <stdio.h>
#include <stdlib.h>
int main() {
struct node {
int data;
struct node *next;
};
int choice;
struct node *head, *tail, *newnode, *temp;
head = tail = NULL;
for (;;) {
newnode = (struct node *)malloc(sizeof(struct node));
if (newnode == NULL)
break;
printf("enter item: ");
if (scanf("%d", &newnode->data) != 1) {
free(nownode);
break;
}
newnode->next = NULL;
if (head == NULL) {
head = newnode;
} else {
tail->next = newnode;
}
tail = newnode;
printf("do you want to continue? [0/1] ");
if (scanf("%d", &choice) != 1 || choice == 0)
break;
}
for (temp = head; temp != NULL; temp = temp->next) {
printf("list is %d \n", temp->data);
}
return NULL;
}