两数相加-python3实现(附带java)

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

  我的想法是,先创建两个链表实例 l3 和 temp,一个用于存储所得到的结果,一个用于返回初始值。我们可以每次将 l1 和 l2 两个链表中值相加存储到 a 变量中,然后除以10求余,将值放入下一个temp的结点中,最后在对a进行除10取整就完成了。代码如下:

# 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
        """
        #先初始化temp链表,l3链表指向temp的0值地址
        temp = ListNode(0)
        l3 = temp
        a = 0
        #当l1不为空或者l2不为空或者a不等于0的时候
        while l1 != None or l2 !=None or a != 0:
            if l1 != None:
                #a等于a加上l1当前的值
                a += l1.val
                #l1的指针指向下一个
                l1 = l1.next
            if l2 != None:
                a += l2.val
                l2 = l2.next
                #temp的下一个的值就是 a%10
            temp.next = ListNode(a%10)
            temp = temp.next
            a=a//10
        #l3代替temp来输出链表 别忘记了l3 的值是temp为0的值.
        return l3.next

附带一下我优秀的ch同学的java代码(暴力破解)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode l3 = null;
        ListNode re = null;
        int a = 0;
        int b = 0;
        do{
            a = 0;
            if (l1 != null)
            {
                a += l1.val;
                l1 = l1.next;
            }
            if (l2 != null)
            {
                a += l2.val;
                l2 = l2.next;
            }
            if(l3 == null){
                l3 = new ListNode(a % 10);
                re = l3;
            }else{
                l3.next = new ListNode(a % 10);
                l3 = l3.next;
            }
            if (b != 0){
                l3.val += b;
                if(l3.val == 10)
                    l3.val = 0;
            }
            b = a / 10;
            if(l3.val == 0&&a>0)
                    b = 1;
            
        }while(l1 != null || l2 != null);
        if(b != 0 || a == 10)
        {
            l3.next = new ListNode(b);
        }
        return re;
    }
}
点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00