LeetCode-2: 给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。
/*两数相加,单向链表,高位在链表尾端*/ struct ListNode { int val; struct ListNode *next; }ListNode; struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { int flag=0;//进位标志 int sum=0; struct ListNode *head=NULL; struct ListNode *p=NULL; struct ListNode *p_end=NULL; struct ListNode *p_L1=l1; struct ListNode *p_L2=l2; for(p_L1;p_L1!=NULL;p_L1=p_L1->next) { p=(struct ListNode*)malloc(sizeof(struct ListNode)); if(head==NULL) head=p; if(p_end==NULL) { p_end=p; p_end->next=NULL; } else p_end->next=p; if(p_L2!=NULL) { sum=p_L1->val+p_L2->val+flag; p_L2=p_L2->next; p->val=sum%10; flag=sum/10; p_end=p; } else { sum=p_L1->val+flag; p->val=sum%10; flag=sum/10; p_end=p; } } for(p_L2;p_L2!=NULL;p_L2=p_L2->next) { p=(struct ListNode*)malloc(sizeof(struct ListNode)); if(head==NULL) head=p; if(p_end==NULL) { p_end=p; p_end->next=NULL; } else p_end->next=p; sum=p_L2->val+flag; p->val=sum%10; flag=sum/10; p_end=p; } if(flag) { p=(struct ListNode*)malloc(sizeof(struct ListNode)); p_end->next=p; p->val=flag; p_end=p; } p_end->next=NULL; return head; }