#include<stdlib.h>
struct node {
int data;
struct node *nxtPtr;
};
struct node *head1, *head2, *head3;
/*
* creates node and fill the given data
*/
struct node * nodeCreation(int data) {
struct node *ptr = (struct node *) malloc(sizeof (struct node));
ptr->data = data;
ptr->nxtPtr = NULL;
return ptr;
}
/* insert node in ascending order */
void insertNode(struct node ** myNode, int data) {
struct node *lPtr, *mPtr, *nPtr = *myNode;
lPtr = nodeCreation(data);
/* insert at the front of the list */
if (*myNode == NULL || (*myNode)->data > data) {
*myNode = lPtr;
(*myNode)->nxtPtr = nPtr;
return;
}
while (nPtr) {
mPtr = nPtr;
nPtr = nPtr->nxtPtr;
if (!nPtr) {
mPtr->nxtPtr = lPtr;
break;
} else if ((data > mPtr->data) && (data < nPtr->data)) {
lPtr->nxtPtr = nPtr;
mPtr->nxtPtr = lPtr;
break;
}
}
return;
}
/* concatenate list 1 and list 2 */
void concatList(struct node **list1, struct node **list2) {
struct node *temp;
if (*list1 == NULL) {
*list1 = *list2;
} else if (*list2) {
temp = *list1;
while (temp->nxtPtr) {
temp = temp->nxtPtr;
}
temp->nxtPtr = *list2;
}
return;
}
/* delete the given list */
struct node * removeList(struct node *ptr) {
struct node *temp;
while (ptr){
temp = ptr->nxtPtr;
free(ptr);
ptr = temp;
}
return NULL;
}
/* traverse the given list and print the contents in each node */
int listTraversal(struct node *ptr) {
int i = 0;
while (ptr) {
printf("%d ", ptr->data);
ptr = ptr->nxtPtr;
i++;
}
return (i);
}
int main (int argc, char *argv[]) {
int data, i, n;
FILE *fp1, *fp2;
fp1 = fopen(argv[1], "r");
fp2 = fopen(argv[2], "r");
if (!fp1 || !fp2) {
printf("Unable to open file\n");
fcloseall();
exit(0);
}
/* scan data from input file to insert into list1*/
while (fscanf(fp1, "%d", &data) != EOF) {
insertNode(&head1, data);
}
/* scan data from input file to insert into list2 */
while (fscanf(fp2, "%d", &data) != EOF) {
insertNode(&head2, data);
}
printf("\nData in First Linked List:\n");
n = listTraversal(head1);
printf("\nNo of elements in linked list: %d\n", n);
printf("\n\nData in Second Linked List:\n");
n = listTraversal(head2);
printf("\nNo of elements in linked list: %d\n\n", n);
concatList(&head1, &head2);
printf("\nData in concatenated List:\n");
n = listTraversal(head1);
printf("\nNo of elements in concatenated list: %d\n\n", n);
head1 = removeList(head1);
return 0;
}
Output: (Concatenation of two Linked Lists - Example Program in C)
1 3 5 7 9 11 13 15
2 4 6 8 10 12 14 16
Data in First Linked List:
1 3 5 7 9 11 13 15
No of elements in linked list: 8
Data in Second Linked List:
2 4 6 8 10 12 14 16
No of elements in linked list: 8
Data in concatenated List:
1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16
No of elements in concatenated list: 16
1 3 5 7 9 11 13 15
2 4 6 8 10 12 14 16
Data in First Linked List:
1 3 5 7 9 11 13 15
No of elements in linked list: 8
Data in Second Linked List:
2 4 6 8 10 12 14 16
No of elements in linked list: 8
Data in concatenated List:
1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16
No of elements in concatenated list: 16
No comments:
Post a Comment