// Write a program to implement addition of two long positive integer numbers using doubly linked list. #include #include #define MAX_DIGITS 100 typedef struct node { int digit; struct node *left; struct node *right; } Node; Node* createNode(int digit) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->digit = digit; newNode->left = NULL; newNode->right = NULL; return newNode; } void insertDigit(Node** head, int digit) { Node* newNode = createNode(digit); if (*head == NULL) { *head = newNode; } else { newNode->right = *head; (*head)->left = newNode; *head = newNode; } } void addNumbers(Node* num1, Node* num2, Node** result) { int carry = 0, sum; Node *ptr1 = num1, *ptr2 = num2; while (ptr1 || ptr2 || carry) { sum = carry; if (ptr1) { sum += ptr1->digit; ptr1 = ptr1->right; } if (ptr2) { sum += ptr2->digit; ptr2 = ptr2->right; } insertDigit(result, sum % 10); carry = sum / 10; } } void printNumber(Node* head) { if (head == NULL) return; printNumber(head->right); printf("%d", head->digit); } int main() { Node *num1 = NULL, *num2 = NULL, *result = NULL; char str[MAX_DIGITS]; int i; printf("Enter first number: "); scanf("%s", str); for (i = 0; str[i] != '\0'; i++) { insertDigit(&num1, str[i] - '0'); } printf("Enter second number: "); scanf("%s", str); for (i = 0; str[i] != '\0'; i++) { insertDigit(&num2, str[i] - '0'); } addNumbers(num1, num2, &result); printf("Sum: "); printNumber(result); printf("\n"); return 0; }