leetcode-2-add two numbers

题目

给定两个链表,输出两个链表对应元素的和,返回结果链表

描述

举例说明
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8

Java代码实现

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

* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/

public class {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode tmp = new ListNode(0);
ListNode res = tmp;
int x = 0;
int sum;

while(l1 != null || l2 != null || x != 0) { //切记,不要忘了进位!!!!
sum = x + (l1 != null ? l1.val : 0) + (l2 != null ? l2.val : 0);
x = sum / 10;
sum = sum % 10;
tmp.next = new ListNode(sum); //注意tmp.next是一个class,需要new进行新建
l1 = l1 != null ? l1.next : null;
l2 = l2 != null ? l2.next : null;
tmp = tmp.next;
}

return res.next;
}
}

Python代码实现

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
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None

class (object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""

tmp = ListNode(0)
result = tmp
x = 0;
while(x or l1 or l2):
y1 = l1.val if l1 else 0
y2 = l2.val if l2 else 0
sum = (y1+y2+x)%10
x = (y1+y2+x)/10
result.next = ListNode(sum)
result = result.next
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return tmp.next

C++代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode tmp(0);
struct ListNode *result = &tmp;
int x = 0;
int sum;
while(l1 || l2 || x){
sum = x+(l1?l1->val:0)+(l2?l2->val:0);
x = sum/10;
sum = sum%10;
result->next = new ListNode(sum);
result = result->next;
l1 = l1 ? l1->next: NULL;
l2 = l2 ? l2->next: NULL;
}
return tmp.next;
}
};