題目如下:
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
只求 pass 的解答:
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
var r []int
v := 0
for l1 != nil || l2 != nil {
if l1 != nil {
v += l1.Val
l1 = l1.Next
}
if l2 != nil {
v += l2.Val
l2 = l2.Next
}
r = append(r, v%10)
v /= 10
}
s := len(r) - 1
result := &ListNode{}
if v > 0 {
result.Val = v
} else {
result.Val = r[s]
s--
}
for i := s; i >= 0; i-- {
result = &ListNode{
Val: r[i],
Next: result,
}
}
return result
}
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
int sum = l1.val + l2.val;
ListNode ans = new ListNode(sum % 10);
ListNode n1 = l1.next;
ListNode n2 = l2.next;
ListNode tmp = ans;
while(n1 != null || n2 != null)
{
sum = (sum / 10) + (n1 == null ? 0 : n1.val) + (n2 == null ? 0 : n2.val);
tmp.next = new ListNode(sum % 10);
n1 = n1 == null ? null : n1.next;
n2 = n2 == null ? null : n2.next;
tmp = tmp.next;
}
if (sum >= 10) tmp.next = new ListNode(1);
return ans;
}
}