题目:
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
思路:遍历两个链表,直到这两个链表都为空,然后相加链表节点中的值。
void AddTwoNumber(List*& first,List*& second,List*& newlist)
{
List* l1=first;
List* l2=second;
List* cur,*node;
int carry=0;
int tmp=0;
newlist = NULL;
if(first == NULL)
{
newlist = second;
return ;
}
if(second == NULL)
{
newlist = first;
return ;
}
while(l1 !=NULL || l2!=NULL)
{
tmp = carry;
if( l1 !=NULL)
{
tmp += l1->value;
l1 = l1->next;
}
if(l2 != NULL)
{
tmp += l2->value;
l2 = l2->next;
}
carry = tmp/10;
tmp = tmp%10;
if(newlist == NULL)
{
newlist = new List;
newlist->next = NULL;
newlist->value = tmp;
cur = newlist;
}
else
{
node = new List;
node->next = NULL;
node->value= tmp;
cur->next = node;
cur = cur->next;
}
}
if(carry ==1)
{
node = new List;
node->next = NULL;
node->value = carry;
cur->next = node;
}
}
int main()
{
int array[]={5,1,2,7};
int array1[]={8,4,3,6,9,9};
List* first;
Init_List(first,array,sizeof(array)/sizeof(int));
List* second;
Init_List(second,array1,sizeof(array1)/sizeof(int));
List* newlist=NULL;
AddTwoNumber(first,second,newlist);
print_list(newlist);
return 0;
}