LeetCode 2. 两数相加
题目链接:https://leetcode-cn.com/problems/add-two-numbers/
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
进位
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * struct ListNode *next; 6 * }; 7 */ 8 9 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){ 10 if(l1==NULL&&l2==NULL) return NULL; 11 if(l1==NULL&&l2!=NULL) return l2; 12 if(l1!=NULL&&l2==NULL) return l1; 13 struct ListNode *newL=(struct ListNode*)malloc(sizeof(struct ListNode)); 14 newL->next=NULL; 15 struct ListNode *p=newL; 16 int x,y,tmp=0,sum=0; 17 while(l1||l2){ 18 x=l1!=NULL?l1->val:0; 19 y=l2!=NULL?l2->val:0; 20 sum=x+y+tmp; 21 tmp=sum/10; 22 p->next=(struct ListNode*)malloc(sizeof(struct ListNode)); 23 p=p->next; 24 p->val=sum%10; 25 p->next=NULL; 26 if(l1) l1=l1->next; 27 if(l2) l2=l2->next; 28 } 29 if(tmp){ 30 p->next=(struct ListNode*)malloc(sizeof(struct ListNode)); 31 p=p->next; 32 p->val=1; 33 p->next=NULL; 34 } 35 return newL->next; 36 }