82 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// Write a program to implement addition of two long positive integer numbers using doubly linked list.
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
 | 
						|
#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;
 | 
						|
}
 |