LC2 Add Two Numbers

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 在释放内存时候:

 

posted on 2017-03-29 15:40  BWB  阅读(187)  评论(0编辑  收藏  举报

导航