链表-Add Two Numbers
Posted summerkiki
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表-Add Two Numbers相关的知识,希望对你有一定的参考价值。
第一版代码(很挫很罗嗦,不过是第一次做,记录一下成长的脚步!继续努力!)
1 /*struct ListNode { 2 int val; 3 struct ListNode *next; 4 };*/ 5 6 typedef struct ListNode ListNode; 7 8 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { 9 ListNode *result = (ListNode *)malloc(sizeof(ListNode)); 10 result->next = NULL; 11 ListNode *now = result; 12 13 ListNode *p1 = l1; 14 ListNode *p2 = l2; 15 int carry = 0; 16 17 while(p1&&p2) 18 { 19 ListNode *p = (ListNode *)malloc(sizeof(ListNode)); 20 p->next = NULL; 21 int r = p1->val + p2->val + carry; 22 carry = r/10; 23 p->val = r%10; 24 now->next = p; 25 now = now->next; 26 p1 = p1->next; 27 p2 = p2->next; 28 } 29 30 while(p1) 31 { 32 ListNode *p = (ListNode *)malloc(sizeof(ListNode)); 33 p->next = NULL; 34 int r = p1->val + carry; 35 carry = r/10; 36 p->val = r%10; 37 now->next = p; 38 now = now->next; 39 p1 = p1->next; 40 } 41 42 while(p2) 43 { 44 ListNode *p = (ListNode *)malloc(sizeof(ListNode)); 45 p->next = NULL; 46 int r = p2->val + carry; 47 carry = r/10; 48 p->val = r%10; 49 now->next = p; 50 now = now->next; 51 p2 = p2->next; 52 } 53 if(carry) 54 { 55 ListNode *p = (ListNode *)malloc(sizeof(ListNode)); 56 p->next = NULL; 57 p->val = carry; 58 now->next = p; 59 now = now->next; 60 } 61 62 return result->next; 63 64 }
要注意返回的内容必须符合题目要求,一开始我直接返回了result,但是leetcode测试的时候会把空的头结点也输出,不符合题目要求。
要全面考虑问题,这题的特殊情况主要体现在进位部分,如999+1这种情况,还有就是两个数的位数可能会不同。
【待补充C++版本。。。】
以上是关于链表-Add Two Numbers的主要内容,如果未能解决你的问题,请参考以下文章
leetcode链表--14add-two-numbers(两链表相加 得到新链表)
(链表 importance) leetcode 2. Add Two Numbers