In this code i want to delete any element in the list this is being done by delpos, i am using memcmp to do it, i am doing this as i have to use this same logic in another program where i get a value and i have to compare that value present in the linked list,(there i wll be comparing structure so strating off with just an integer) can any one please tell what mistake i have done in delpos, while displaying it is displaying some junk values.
#include<stdio.h>
#include<stdlib.h>
void insertbeg();
void delpos();
void display();
struct node {
int info;
struct node *link;
} *first = NULL;
struct node *create();
int item, key;
main() {
int choice;
while (1) {
printf("\nchoices are:\n");
printf("\n1.Insertbeg\n2.delpos\n3.display\n4.exit\n");
printf("Enter U'r choice: ");
scanf("%d", &choice);
switch (choice) {
case 1: insertbeg();
break;
case 2: delpos();
break;
case 3: display();
break;
case 4: exit(1);
default: printf("INVALID CHOICE TRY AGAIN\n");
}
}
}
struct node *create() {
struct node *new;
new = (struct node*) malloc(sizeof (struct node));
return (new);
}
void insertbeg() {
struct node *new;
new = create();
printf("Enter element to be inserted: ");
scanf("%d", &item);
if (first == NULL) {
new->info = item;
new->link = NULL;
first = new;
} else {
new->info = item;
new->link = first;
first = new;
}
}
void delpos() {
int key;
struct node *temp, *prev = NULL;
int cmp_value, cmp_value1;
if (first == NULL) {
printf("LIST IS EMPTY\n");
return;
} else {
temp = first;
printf("Enter the KEY element which is to be deleted: ");
scanf("%d", &key);
while (temp->link != NULL) {
cmp_value = memcmp(&temp->info, &key, 4);
if (cmp_value == 0) {
if (prev == NULL)
first = temp->link;
else
prev->link = temp->link;
}
else {
prev = temp;
cmp_value1 = memcmp(&temp->info, &key, 4);
temp = temp->link;
free(temp);
}
}
}
}