Linked Lists Integer addition ? HELP Please??
I'm still very new to programming and I've never done linked lists before. Here's the assignment: http://www.geocities.com/blueninja83/hugeintegers.html /* Note there picture of the reversed linked list is missing - it's suppose to have the above number (say it was 594) in boxes (representing the link list ) it the order 495 (backwards) so that 5 is next to the null character meaning it is your head at the end. */
I can't figure out how to just add single digits in a linked list. Like there are two linked lists and I can't figure out how to add one from one list to another from another list. I use a char data type because I heard from someone that that was the only way to read a huge number one digit at a time. My program compiles but gives a segmentation fault (which I think is caused by a pointer not pointing to the correct item or somthing?). Here's the code
Code:
#include <stdio.h>
#include <stdlib.h>
struct integerNode{
char value;
struct integerNode *next;
};
typedef struct integerNode ELEMENT; /* Just easily refrences the structure */
typedef struct integerNode *integer; /* Used to build up the linked list */
integer ReadInteger();
void PrintInteger(integer n);
int compare(integer n1, integer n2);
integer AddTwoIntegers(integer n1, integer n2);
integer SubtractIntegers(integer n1, integer n2);
integer RecycleInteger(integer n);
main(void)
{
ELEMENT *n1; /* The first large integer */
ELEMENT *n2; /* The second large integer */
ELEMENT *n; /* The answer after the addition or subtraction */
int i=0;
while(i!=3)
{
printf("1)Add\n2)Subtract\n3)Quit\n");
printf("Please enter the number of the option you wish to perform\n");
scanf("%d", &i);
getchar();
switch(i)
{
case 1:
printf("Please enter your first of two large integers\n");
n1=ReadInteger();
printf("Please enter your second of two large integers\n");
n2=ReadInteger();
AddTwoIntegers(n1, n2);
PrintInteger(n);
case 2:
SubtractIntegers(n1, n2);
case 3:
exit(0);
}
}
}
integer ReadInteger( )
{
char ch;
ELEMENT *head = NULL; /* The head of the linked list always has a null char hence the null*/
ELEMENT *new; /* A pointer to the linked list */
while((ch=getchar())!='\n')
{
if( (ch>='0' ) && (ch<='9') ){
new=malloc(sizeof(ELEMENT));
new->value=ch;
new->next=head;
head=new;
}
}
return head;
printf("\n");
}
integer AddTwoIntegers(integer n1, integer n2)
{
int val1, val2, total;
ELEMENT *new; /*A pointer structure for the an answer slot/node */
ELEMENT *head; /* A node for the head of the answer link list */
while((n1!=NULL) && (n2!=NULL))
{
new=malloc(sizeof(ELEMENT));
val1=n1->value-48;
val2=n2->value-48;
total=val1+val2;
new->value=total;
new->next=head;
head=new;
n1=n1->next;
n2=n2->next;
}
/*printf("%d", total); */
}
integer SubtractIntegers(integer n1, integer n2)
{
}
integer RecycleInteger(integer n)
{
}
void PrintInteger(integer n)
{
if(n->next!=NULL)
{
PrintInteger(n->next);
printf("%c", n->value);
}
else
printf("%c", n->value);
}
Any help would be greatly appreciated.