Fork me on GitHub

445.AddTwoNumbers

问题

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例:

1
2
3
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

解决方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92


typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;

static ListNode * CreateNode(int data)
{
ListNode *newNode = (ListNode *)malloc(sizeof(ListNode));
assert(newNode);
newNode->val = data;
newNode->next = NULL;

return newNode;
}

void ListInsert(ListNode **list,int data)
{
//if (*list == NULL)
//{

//}
ListNode *newNode = CreateNode(data);

newNode->next = *list;
*list = newNode;
}

ListNode* addTwoNumbers( ListNode *list1,const ListNode *list2)
{
int num1 = 0;
int num2 = 0;
ListNode* l1 = list1;
ListNode* l2 = list2;
while (l1 != NULL)
{
num1 = num1*10+l1->val;
l1 = l1->next;
}

printf("%d\n",num1); // 321

while (l2 != NULL)
{
num2 = num2*10+l2->val;
l2 = l2->next;
}
printf("%d\n", num2); // 654


int sum = num1 + num2; // 975

ListNode *newNode = NULL;

while (sum>0)
{
ListInsert(&newNode, sum %10);
sum = sum / 10;
}
/*int lg = 1;
int temp = sum;
while (temp > 10) {
temp = temp / 10;
lg *= 10;
}
while (sum > 0) {
ListInsert(&newNode, sum/lg);
sum = sum - (sum / lg)*lg;
lg = lg / 10;
}*/
/*while (sum>9)
{
ListInsert(&newNode,sum);
sum = sum % 10;
}
ListInsert(&newNode,sum);*/
return newNode;
}

void Print(int sum)
{
if (sum < 9)
{
printf("%d ", sum);
}
else
{
Print(sum/10);
printf("%d ",sum%10);
}
}

本文标题:445.AddTwoNumbers

文章作者:LiuXiaoKun

发布时间:2018年09月12日 - 12:09

最后更新:2019年02月13日 - 16:02

原始链接:https://LiuZiQiao.github.io/2018/09/12/AddTwoNumbers/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%