#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
struct bList{
bList *left;
int num;
bList *right;
};
void header(bList **);
void enter(bList **list);
void makeList(bList **list, int number);
void add(bList **list1, bList **list2, bList **list3);
void print(bList **);
int main()
{
bList *list1, *list2, *list3;
//create header node for two list
clrscr();
header(&list1);
header(&list2);
printf("Enter first number(-1) to END:\n");
enter(&list1);
printf("Enter second number(-1) to END:\n");
enter(&list2);
header(&list3);
add(&list1, &list2, &list3);
print(&list3);
getch();
return 0;
}
//******************
void header(bList **list)
{
(*list) = (bList *)malloc(sizeof(struct bList));
(*list) -> left = (*list) -> right = *list;
(*list) -> num = 0;
}
//*************
void enter(bList **list)
{
int number;
while(1)
{
printf("One block(3 digit):");
scanf("%d", &number);
if(number > 999)
{
printf("Block is illegal. Enter agin.");
getch();
}
else if(number == -1)
break;
else
makeList(list, number);
}
}
//******************
void makeList(bList **list, int number)
{
(*list) -> num ++;
bList *help;
help = (bList *)malloc(sizeof(struct bList));
help -> num = number;
help -> left = (*list) -> left;
(*list) -> left -> right = help;
(*list) -> left = help;
help -> right = (*list);
}
//******************
void add(bList **list1, bList **list2, bList **list3)
{
int num1, num2, temp, result, carry = 0;
bList *h1, *h2;
h1 = (*list1) -> left;
h2 = (*list2) -> left;
while(h1 != (*list1) && h2 != (*list2))
{
num1 = h1 -> num;
num2 = h2 -> num;
temp = num1 + num2 + carry;
result = temp % 1000;
carry = temp / 1000;
makeList(list3, result);
h1 = h1 -> left;
h2 = h2 -> left;
}
while(h2 != (*list2))
{ //if list2 not finished
num2 = h2 -> num;
temp = num2 + carry;
result = temp % 1000;
carry = temp / 1000;
makeList(list3, result);
h2 = h2 -> left;
}
while(h1 != (*list1))
{ //if list1 not finished
num1 = h1 -> num;
temp = num1 + carry;
result = temp % 1000;
carry = temp / 1000;
makeList(list3, result);
h2 = h2 -> left;
}
if(carry != 0)
makeList(list3, carry);
}
//******************
void print(bList **list)
{
bList *h;
printf("Sum of two numbers is :");
h = (*list) -> left;
while(h != *list)
{
if(h -> num < 10)
printf("%d%d%d ",0,0, h -> num);
else if(h -> num >= 10 && h -> num < 100)
printf("%d%d ",0, h -> num);
else
printf("%d ", h -> num);
h = h -> left;
}
}