版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fallinlovelj/article/details/54289361
题目
You are given two non-empty linked lists representing two non-negative integers. 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.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Slolution1:
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
typedef struct ListNode* P_ListNode ;
P_ListNode __create__node__( int data )
{
P_ListNode _p = malloc( sizeof(struct ListNode ) ) ;
_p->val = data ;
_p->next = NULL ;
return _p ;
}
P_ListNode p1 = l1 ;
P_ListNode p2 = l2 ;
P_ListNode phead = __create__node__( 0 ) ;
P_ListNode pwalk = phead ;
int overflow = 0;
while( p1 || p2 )
{
int vl = 0 ;
int vr = 0 ;
if( p1 != NULL )
{
vl = p1 ->val ;
p1 = p1->next ;
}
if( p2 != NULL )
{
vr = p2->val ;
p2 = p2->next ;
}
int sum_current = vl + vr + overflow ;
pwalk ->next = __create__node__( sum_current % 10 ) ;
overflow = sum_current /10 ;
pwalk = pwalk ->next ;
}
if(overflow ){
pwalk->next = __create__node__(overflow ) ;
}
P_ListNode *_tmp = phead;
phead = phead->next ;
free( _tmp ) ;
return phead ;
}