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; }
原文地址:http://blog.csdn.net/yusiguyuan/article/details/44902461