Heya!
Right now my program displays the last element very first and the first entered element last.
What would the most simple approach to reverse the current order of the list, by either changing insert or display function?
Code:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LAENGE 100
struct data
{
char name[LAENGE+1];
struct data *next;
};
struct data *start_pointer = NULL;
struct data *next = NULL;
void insert(void);
void display(void);
void deleteSingle(void);
void deleteAllQuit(void);
int main (void)
{
for (;;)
{
char code;
printf("1. Insert a name\n2. Delete a name\n3. Display all the names\n4. Exit\nEnter your option: ");
scanf(" %c", &code);
while (getchar() != '\n')
;
switch (code)
{
case '1':
insert();
break;
case '2':
deleteSingle();
break;
case '3':
display();
break;
case '4':
deleteAllQuit();
default:
printf("Illegal code\n");
}
printf("\n");
}
}
int read_line(char str[], int n)
{
int ch, i = 0;
printf("Enter name: ");
while (isspace(ch = getchar()))
;
while (ch != '\n' && ch != EOF)
{
if (i < n)
str[i++] = ch;
ch = getchar();
}
str[i] = '\0';
return i;
}
void insert(void)
{
struct data *ptr;
ptr = malloc(sizeof(struct data));
read_line(ptr->name, LAENGE);
ptr->next = start_pointer;
start_pointer = ptr;
if (ptr->next == NULL)
{
printf("Inserted \"%s\" as the only element of the list.\n\n", ptr->name);
}
else
{
printf("Inserted \"%s\" at the end of the list.\n\n", ptr->name);
}
}
void display(void)
{
int count=0;
struct data *ptr = start_pointer;
printf ("\nList of names:\n");
while (ptr != NULL)
{
count++;
printf ("(%d) %s\n", count, ptr->name);
ptr = ptr->next;
}
}
void deleteSingle(void)
{
if(start_pointer != NULL)
{
struct data *ptr = start_pointer;
struct data *prev;
char stringrem[LAENGE+1];
read_line(stringrem, LAENGE);
while (ptr != NULL && strcmp(ptr->name,stringrem))
{
prev = ptr;
ptr = ptr->next;
}
if (ptr == NULL)
{
printf("\"%s\" does not exist in the list.\n\n", stringrem);
return;
}
else if (ptr == start_pointer)
{
start_pointer = ptr->next;
}
else
{
prev->next = ptr->next;
}
printf("Deleted \"%s\".\n\n", stringrem);
free (ptr);
}
}
void deleteAllQuit(void)
{
if(start_pointer != NULL)
{
struct data *ptr = start_pointer;
while (ptr != NULL)
{
free(ptr);
ptr = ptr->next;
}
}
printf("Deleted all names.\nBye.\n");
exit(0);
}
thx in advance ^^