/*Operations on linked list- count no. of nodes, reverse and concatenate */ #include<stdio.h> #include<conio.h> #include<malloc.h> //Declaration of node struct node { int data; struct node *next; }; struct node *start=NULL, *ptr, *start1=NULL, *start2=NULL, *new_node; //Declaration of functions struct node *create(struct node *); void *display(struct node *); void *count(struct node *); struct node *concat(struct node *, struct node *); struct node *reverse(struct node *); void main() { int choice; clrscr(); printf("Operations:\n1. Create a linked list\n2. Count the number of nodes\n3. Reverse the linked list\n4. Concatenate two linked lists\n"); printf("\nEnter your choice "); scanf("%d",&choice); switch(choice) { case 1: start=create(start); printf("\nThe linked list is \n"); display(start); break; case 2: start=create(start); count(start); break; case 3: start=create(start); start=reverse(start); printf("\nThe reverse of the linked list is \n"); display(start); break; case 4: start1=create(start); start2=create(start); start1=concat(start1, start2); printf("\nThe concatenation of the two linked lists is \n"); display(start1); break; default: printf("Invalid choice"); break; } getch(); } //-------CREATE------- struct node *create(struct node *start) { int n,i; //n-No. of nodes printf("\nEnter the number of nodes "); scanf("%d",&n); //For accepting the values for(i=0;i<n;i++) { new_node=(struct node*)malloc(sizeof(struct node)); printf("Enter the data "); scanf("%d",&new_node->data); new_node->next=NULL; if(start==NULL) //Implies list is empty start=new_node; else { ptr=start; while(ptr->next!=NULL) ptr=ptr->next; ptr->next=new_node; } } return start; } //-------DISPLAY------- void *display(struct node *start) { if(start==NULL) printf("The linked list is empty"); else { ptr=start; while(ptr!=NULL) { printf("%d \t",ptr->data); ptr=ptr->next; } } } //-------COUNT------- void *count(struct node *start) { int length=0; ptr=start; while(ptr!=NULL) { length++; ptr=ptr->next; } printf("\nThe number of nodes is %d",length); } //-------REVERSE------ struct node *reverse(struct node *start) { struct node *temp, *temp1, *rev; //rev-Reversed list temp=start; rev=NULL; while(temp!=NULL) { temp1=rev; rev=temp; temp=temp->next; rev->next=temp1; } start=rev; return start; } //-------CONCATENATE------- struct node *concat(struct node *start1, struct node *start2) { if(start1==NULL) { start1=start2; return start1; } if(start2==NULL) return start1; ptr=start1; while(ptr->next!=NULL) ptr=ptr->next; ptr->next=start2; return start1; } /* OUTPUT - 1 Operations: 1. Create a linked list 2. Count the number of nodes 3. Reverse the linked list 4. Concatenate two linked lists Enter your choice 1 Enter the number of nodes 3 Enter the data 4 Enter the data 5 Enter the data 6 The linked list is 4 5 6 */ /* OUTPUT - 2 Operations: 1. Create a linked list 2. Count the number of nodes 3. Reverse the linked list 4. Concatenate two linked lists Enter your choice 2 Enter the number of nodes 3 Enter the data 4 Enter the data 5 Enter the data 6 The number of nodes is 3 */ /* OUTPUT - 3 Operations: 1. Create a linked list 2. Count the number of nodes 3. Reverse the linked list 4. Concatenate two linked lists Enter your choice 3 Enter the number of nodes 3 Enter the data 4 Enter the data 5 Enter the data 6 The reverse of the linked list is 6 5 4 */ /* OUTPUT - 4 Operations: 1. Create a linked list 2. Count the number of nodes 3. Reverse the linked list 4. Concatenate two linked lists Enter your choice 4 Enter the number of nodes 3 Enter the data 4 Enter the data 5 Enter the data 6 Enter the number of nodes 2 Enter the data 7 Enter the data 8 The concatenation of the two linked lists is 4 5 6 7 8 */
Comments
Post a Comment