Linked List Display Error
My linked list display get error..please help
Code:
#include<stdio.h>#include<stdlib.h>
#include<stdbool.h>
struct test_struct
{
//int val;
char val2[10];
struct test_struct *next;
};
struct test_struct *head = NULL;
struct test_struct *curr = NULL;
struct test_struct* create_list(char val2[10])
{
printf("\n creating list with headnode as [%s]\n",val2);
struct test_struct *ptr = (struct test_struct*)malloc(sizeof(struct test_struct));
if(NULL == ptr)
{
printf("\n Node creation failed \n");
return NULL;
}
ptr->val2[10] = val2[10];
ptr->next = NULL;
head = curr = ptr;
return ptr;
}
struct test_struct* print_list(char val2[10])
{
struct test_struct* ptr = head;
printf("\n -------Printing list Start------- \n");
while(ptr != NULL)
{
printf("\n [%s] \n",ptr->val2);
ptr = ptr->next;
}
printf("\n -------Printing list End------- \n");
return ptr;
}
struct test_struct* add_to_list(char val2[10], bool add_to_end)
{
if(NULL == head)
{
return (create_list(val2));
}
if(add_to_end)
printf("\n Adding node to end of list with value [%s]\n",val2);
else
printf("\n Adding node to beginning of list with value [%s]\n",val2);
struct test_struct *ptr = (struct test_struct*)malloc(sizeof(struct test_struct));
if(NULL == ptr)
{
printf("\n Node creation failed \n");
return NULL;
}
ptr->val2[10] = val2[10];
ptr->next = NULL;
if(add_to_end)
{
curr->next = ptr;
curr = ptr;
}
else
{
ptr->next = head;
head = ptr;
}
return ptr;
}
struct test_struct* search_in_list(char val2[10], struct test_struct **prev)
{
struct test_struct *ptr = head;
struct test_struct *tmp = NULL;
bool found = false;
printf("\n Searching the list for value [%s] \n",val2);
while(ptr != NULL)
{
if(ptr->val2 == val2)
{
found = true;
break;
}
else
{
tmp = ptr;
ptr = ptr->next;
}
}
if(true == found)
{
if(prev)
*prev = tmp;
return ptr;
}
else
{
return NULL;
}
}
void delete_begin(void)
{
if(head==NULL)
{
printf("\nLIST IS EMPTY\n");
}
else
{
test_struct *ptr=head;
head=head->next;
free(ptr);
}
//print_list();
}
void delete_end(void)
{
test_struct *ptr;
//if list is empty.
if(head==NULL)
{
printf("\nEMPTY LIST\n");
}
//if list has only one node.
if(head->next==NULL)
{
ptr=head;
head=NULL;
free(ptr);
}
//Traversing the list.
else
{
test_struct *prev;
ptr=head;
while(ptr->next!=NULL)
{
prev=ptr;
ptr=ptr->next;
}
prev->next=NULL;
free(ptr);
}
//print_list();
}
int delete_from_list(char val2[10])
{
struct test_struct *prev = NULL;
struct test_struct *del = NULL;
printf("\n Deleting value [%s] from list\n",val2);
del = search_in_list(val2,&prev);
if(del == NULL)
{
return -1;
}
else
{
if(prev != NULL)
prev->next = del->next;
if(del == curr)
{
curr = prev;
}
else if(del == head)
{
head = del->next;
}
}
free(del);
del = NULL;
return 0;
}
void menu()
{
int i = 0, ret = 0, select=0;
char y[10];
struct test_struct *ptr = NULL;
printf("\n\n----- Menu -----\n");
printf(" 1-Add begin\n 2-Add end\n 3-Delete begin\n 4-Delete end\n 5-Delete anywhere\n 6-End\n");
printf("\n\nPlease select an action: ");
scanf("%d", &select);
switch(select)
{
case 1:
/* Add at Beginning */
printf("\n Add at Beginning \n");
printf(" Enter the input : ");
scanf("%s",&y);
add_to_list(y,false);
//print_list();
/* Add at Beginning */
break;
case 2:
/* Add at End */
printf("\n Add at End \n");
printf(" Enter the input : ");
scanf("%s",&y);
add_to_list(y,true);
print_list(y);
/* Add at End */
break;
case 3:
/* Delete Begin */
delete_begin();
/* Delete Begin */
break;
case 4:
/* Delete End */
delete_end();
/* Delete End */
break;
case 5:
/* Delete at Everywhere */
printf("\n Delete at Everywhere \n");
printf(" Enter the input : ");
scanf("%s",&y);
ret = delete_from_list(y);
if(ret != 0)
{
printf("\n delete [val = %d] failed, no such element found\n",y);
}
else
{
printf("\n delete [val = %d] passed \n",y);
}
//print_list();
/* Delete at Everywhere */
break;
default:
printf("\nThanks For Using The System !\n Have a Nice Day.");
}
}
int main(void)
{
int i = 0, ret = 0, select=0;
char y[10];
struct test_struct *ptr = NULL;
/* Create Linked List */
printf("\n Create Linked List of 5 Name \n");
printf(" Enter the input : ");
for(i = 0; i<5; i++)
{
scanf("%s",&y);
add_to_list(y,true);
}
print_list(y);
/* Create Linked List */
/* Menu */
menu();
/* Menu */
return 0;
}