Add Two Numbers

本文介绍了解决LeetCode上两数相加问题的三种不同编程语言的实现方案,包括C++、C和Python3。每种实现都详细展示了如何通过链表存储两个非负整数的逆序形式,并将它们相加后的结果同样以链表形式返回。

leetcode02.

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.

1.C++解法

/**
 * 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 *p=new ListNode(0);
        ListNode *ret=p;
        int carry=0;
        while(l1!=NULL||l2!=NULL)
        {
            int sum=0;
            if(l1!=NULL)
            {
                sum=sum+l1->val;
                l1=l1->next;
            }
            if(l2!=NULL)
            {
                sum=sum+l2->val;
                l2=l2->next;
            }
            int temp=(carry+sum)%10;
            carry=(carry+sum)/10;
            ret->next=new ListNode(temp);
            ret=ret->next;
        }
        if(carry!=0)
        {
            ret->next=new ListNode(carry);
            ret=ret->next;
        }
        return p->next;
    }

};

2.C解法

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *result=(struct ListNode *)malloc(sizeof(struct ListNode));  
    struct ListNode *p=result;
    int carry=0;  
    while (l1!=NULL || l2!=NULL)  
    {  
        int sum=0;
        if(l1!=NULL)
        {
            sum=sum+l1->val;
            l1=l1->next;
        }
        if(l2!=NULL)
        {
            sum=sum+l2->val;
            l2=l2->next;
        }
        int temp=(sum+carry)%10;
        carry=(sum+carry)/10;
        p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
        p->next->val=temp;
        p=p->next;
    }  
    if(carry)
    {
        p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
        p->next->val=carry;
        p=p->next;
    }
    p->next=NULL;
    return result->next;

}

3.    Python3解法

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        if l1 is None:
            return l2
        elif l2 is None:
            return l1
        else:          
            carry = 0
            ret =ListNode(0)
            ret_Last = ret
            while(l1 or l2):
                sum = 0
                if(l1):
                    sum = l1.val
                    l1 = l1.next
                if(l2):
                    sum += l2.val
                    l2 = l2.next
                sum += carry
                ret_Last.next = ListNode(sum%10)
                ret_Last = ret_Last.next
                carry = sum//10
            if(carry):
                ret_Last.next =ListNode(1)
            ret_Last = ret.next
            del ret
            return ret_Last

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值