首页 > 代码库 > 2.Add Two Numbers(List To Long)

2.Add Two Numbers(List To Long)

技术分享

本题题意是指将两个数倒序存储在链表中,再将两数之和同样存储在链表中输出。

我最开始的思路是将每一位相加,再考虑是否进位,但这时就需要考虑一些情况,比较麻烦。

于是我决定采取另一种在网上新学到的方法:这个方法就是将链表中的数字串起来,当做一个long,例如2->4->5,可以根据题目具体要求转化成long型的542,再做后续的操作,就很容易了。

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution
10 {
11 public:
12     long ListToLong(ListNode* l)
13     {
14         long res = 0;
15         long tem = 1;
16         while(l)
17         {
18             res = res + l->val * tem;
19             tem = tem * 10;
20             l = l->next;
21         }
22         return res;
23     }
24     long get_n(long num)
25     {
26         long x = 10;
27         long n = 1;
28         while(num >= x)
29         {
30             n ++;
31             x = x * 10;
32         }
33         return n;
34     }
35     void add(ListNode* l1, ListNode* l2)
36     {
37         while(l1->next)
38         {
39             l1 = l1->next;
40         }
41         l1->next = l2;
42     }
43     ListNode* LongToList(long num)
44     {
45         ListNode* res = new ListNode(-1);
46         int n = get_n(num);
47         //cout<<"n = "<<n<<endl;
48         int x = 0;
49         for(int i = 0;i < n;i ++)
50         {
51             x = num % 10;
52             num = num / 10;
53             ListNode* node = new ListNode(x);
54             add(res,node);
55         }
56         return res->next;
57     }
58     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
59     {
60         long num1 = ListToLong(l1);
61         long num2 = ListToLong(l2);
62         //cout<<"num1 = "<<num1<<" num2 = "<<num2<<endl;
63         long num3 = num1 + num2;
64         //cout<<"num3 = "<<num3<<endl;
65         ListNode* res = LongToList(num3);
66         return res;
67     }
68 };

但上面的代码提交后的结果很让我无语。。。见下图

技术分享

只有两个示例没有通过。。。

 

2.Add Two Numbers(List To Long)