1、题目
2、算法
*1 两条链顺序相加;
*2 若l1未完成,继续相加;
*3 若l2未完成,继续相加;
*4 若还有进位,则填入进位;
否则,将->next置为NULL,并释放当前节点内存。
【接口代码】
1 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { 2 struct ListNode*p1 = l1, *p2 = l2, *tp=NULL,*p=NULL,*head = NULL,*last=NULL; 3 int i; 4 int c; 5 6 head = (struct ListNode *)malloc(sizeof(struct ListNode)); 7 p = head; 8 c = 0; 9 //直接累加 10 while (p1 != NULL && p2 != NULL) 11 { 12 p->val = p1->val + p2->val + c; 13 c = p->val > 9 ? 1 : 0; 14 p->val = c > 0 ? p->val-10 : p->val; 15 16 last = p; 17 tp = (struct ListNode *)malloc(sizeof(struct ListNode)); 18 p->next = tp; 19 p = p->next; 20 p1 = p1->next; 21 p2 = p2->next; 22 } 23 while (p1) 24 { 25 p->val = p1->val + c; 26 c = p->val > 9 ? 1 : 0; 27 p->val = c > 0 ? p->val - 10 : p->val; 28 last = p; 29 tp = (struct ListNode *)malloc(sizeof(struct ListNode)); 30 p->next = tp; 31 p = p->next; 32 p1 = p1->next; 33 } 34 35 while (p2) 36 { 37 p->val = p2->val + c; 38 c = p->val > 9 ? 1 : 0; 39 p->val = c > 0 ? p->val - 10 : p->val; 40 last = p; 41 tp = (struct ListNode *)malloc(sizeof(struct ListNode)); 42 p->next = tp; 43 p = p->next; 44 p2 = p2->next; 45 } 46 if (c != 0) 47 { 48 p->val = c; 49 p->next = NULL; 50 } 51 else 52 { 53 last->next = NULL; 54 free(tp); 55 } 56 57 return head; 58 }
【其他代码】
1 struct ListNode{ 2 int val; 3 struct ListNode *next; 4 }; 5 6 int main() 7 { 8 struct ListNode *p1, *p2,*h1,*h2,*tp; 9 int i,j; 10 int a[] = {2,4,3,5,6,4}; 11 p1 = (struct ListNode *)malloc(sizeof(struct ListNode)); 12 p2 = (struct ListNode *)malloc(sizeof(struct ListNode)); 13 h1 = p1; h2 = p2; 14 h1->val = 5; h1->next = NULL; 15 h2->val = 5; h2->next = NULL; 16 tp = addTwoNumbers(h1,h2); 17 return 0; 18 }
3、心得
*1 两条链是顺序相加的,没有反转
*2 在释放内存时候: