header:
Code:
struct node{
int val;
struct node *next;
struct node *prev;
};
typedef struct node n;
extern int number;
int add_node(n **first, n **last, int numdum);
int delete_node(n **first, n **last, int number);
n* create_node(int data);
main:
Code:
int main(){
int ch, number, numdum = 0;
n *new, *ptr, *prev, *first, *last;
first = NULL;
last = NULL;
clrscr();
printf("Enter number of nodes: ");
scanf("%d", &number);
while (1){
printf("\n\n[1] Insert Node \n[2] Delete Node\n[3] Exit\n");
printf("\nEnter your choice: ");
scanf("%d", &ch);
switch (ch){
case 1:
if(number != numdum){
numdum++;
add_node(&first,&last,numdum);
}else{
printf("Number of nodes achieved!");
}
break;
case 2:
number--;
delete_node(&first,&last,number);
break;
case 3:
exit(0);
default:
printf("\ninvalid choice");
}
}
}
add:
Code:
int add_node(n **first, n **last, int numdum){
int info,i;
n *new, *ptr, *t1, *t2, *prev;
t1 = *first;
t2 = *last;
printf("\nEnter node value: ");
scanf("%d", &info);
new = create_node(info);
if (t1 == NULL){
t1 = t2 = new;
t1->next = t2->next = NULL;
t1->prev = t2->prev = NULL;
*first = t1;
*last = t2;
}else{
t2->next = new;
new->prev = t2;
t2 = new;
t2->next = t1;
t1->prev = t2;
*last = t2;
}
if (t1 == t2 && t1 == NULL)
printf("\nlist is empty!");
else{
for (ptr = t2, i = 0;i < numdum;i++,ptr = ptr->prev){
if(ptr->val != NULL){
if(i == 0){
if(numdum > 1){
printf("\n R -> %d", ptr->val);
}else{
printf("\n FR -> %d", ptr->val);
}
}else if(numdum == (i + 1)){
printf("\n F -> %d", ptr->val);
}else{
if(numdum != 1){
printf("\n %d", ptr->val);
}
}
}
}
}
return 1;
}
delete:
Code:
int delete_node(n **first, n **last, int numdum){
int i;
n *temp, *prevnode, *ptr, *t1, *t2;
t1 = *first;
t2 = *last;
ptr = t1;
prevnode = ptr; /* first */
ptr = ptr->next;
if(t1 != t2){
t2->next = prevnode->next;
ptr->prev = prevnode->prev;
t1 = ptr;
printf("%d is deleted", prevnode->val);
free(*first);
}else{
free(*first);
free(*last);
t1 = NULL;
t2 = NULL;
}
*first = t1;
*last = t2;
if (t1 == t2 && t1 == NULL)
printf("\nlist is empty!");
else{
for (ptr = t2, i = 0;i < numdum;i++,ptr = ptr->prev){
if(ptr->val != NULL){
if(i == 0){
if(numdum > 1){
printf("\n R -> %d", ptr->val);
}else{
printf("\n FR -> %d", ptr->val);
}
}else if(numdum == (i + 1)){
printf("\n F -> %d", ptr->val);
}else{
if(numdum != 1){
printf("\n %d", ptr->val);
}
}
}
}
}
return 1;
}
My new problem here now is that when i try to add nodes and delete them afterwards it will work fine, but if i were to add some nodes after deleting one the program will not work properly.
example:
i will enter 3,4 and 5 as nodes.
Head = H, tail = T
H -> 5
4
T -> 3
now if i were to pop the head
H -> 4
T -> 3
but if i add another node example 2
this happens:
F -> 2
4
3
T -> 2
also if i were to delete all the contents of the list and add a new node there are still some values left even though it should have been empty.
any reason as to why this is happening?
thank you