Open SnackMen opened 7 years ago
[AC] LeetCode 2 Add Two Numbers
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
var tail = null;
var head = null;
var num = 0,val,p;
var p1 = l1,p2 = l2;
while(p1 !== null && p2 !== null){
if(p1.val + p2.val + num >= 10){
val = (p1.val+p2.val + num)%10;
num = 1;
}else{
val = p1.val+p2.val + num;
num = 0;
}
p = new ListNode(val);
if(tail){
tail.next = p;
tail = p;
}else{
tail = p;
head = tail;
}
p1 = p1.next;
p2 = p2.next;
}
while(p1 !== null){
if(p1.val + num >= 10){
val = (p1.val + num)%10;
num = 1;
}else{
val = p1.val + num;
num = 0;
}
p = new ListNode(val);
tail.next = p;
tail = p;
p1 = p1.next;
}
while(p2 !== null){
if(p2.val + num >= 10){
val = (p2.val + num)%10;
num = 1;
}else{
val = p2.val + num;
num = 0;
}
p = new ListNode(val);
tail.next = p;
tail = p;
p2 = p2.next;
}
if(num > 0){
p = new ListNode(num);
tail.next = p;
}
return head;
};
简化版:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
var dumHead = new ListNode(0);
var cur = dumHead;
var p = l1, q = l2;
var x1,x2,sum,carry = 0;
while(p!==null || q!==null){
x1 = (p !== null ? p.val : 0);
x2 = (q !== null ? q.val : 0);
sum = x1 + x2 + carry;
carry = Math.floor(sum/10);
cur.next = new ListNode(sum % 10);
cur = cur.next;
if(p!==null) p = p.next;
if(q!==null) q = q.next;
}
if(carry > 0){
cur.next = new ListNode(carry);
}
return dumHead.next;
};
[AC] LeetCode 2 Add Two Numbers
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *head = new ListNode(0);
ListNode *p = head, *p1 = l1, *p2 = l2;
int carry = 0;
while(p1 != NULL || p2 != NULL || carry != 0)
{
p->next = new ListNode((p1 == NULL ? 0 : p1->val) + (p2 == NULL ? 0 : p2->val) + carry);
p = p->next;
carry = p->val / 10;
p->val %= 10;
if(p1 != NULL)
p1 = p1->next;
if(p2 != NULL)
p2 = p2->next;
}
p = head->next;
delete head;
return p;
}
};
LeetCode-2-C#
public class Solution
{
public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
{
if (l1 == null && l2 == null) return null;
int val;
int nex = 0;
if (l1 == null || l2 == null)
{
val = l1 == null ? l1.val : l1.val;
if (l1 == null)
{
l1 = new ListNode(0);
}
else {
l2 = new ListNode(0);
}
}
else
{
val = (l1.val + l2.val) % 10;
nex = (l1.val + l2.val) / 10;
}
ListNode l = new ListNode(val);
ListNode ret = l;
while (l1.next != null || l2.next != null)
{
l.next = new ListNode(nex);
l = l.next;
if (l1.next == null)
{
l2 = l2.next;
nex = (l.val + l2.val) / 10;
l.val = (l.val + l2.val) % 10;
}
else if (l2.next == null)
{
l1 = l1.next;
nex = (l.val + l1.val) / 10;
l.val = (l.val + l1.val) % 10;
}
else
{
l1 = l1.next;
l2 = l2.next;
nex = (l.val + l1.val + l2.val) / 10;
l.val = (l.val + l1.val + l2.val) % 10;
}
}
if(nex != 0)
{
l.next = new ListNode(nex);
}
return ret;
}
}
POJ1011
LeetCode 2 Add Two Numbers