2.两数相加-Python-LeetCode

题目

两数相加:

给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。

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

示例:

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

解法:把链表l1和l2中的数字从左到右一个个读取出来的同时按照位数规律乘10的n次,同时存入变量a。然后创建两个链表,temp和l3,l3是用来最后输出temp的,因为l3一直都指向temp的初始位置。  a对10取余的值放入temp中。

while l1 != None or l2 !=None or a != 0:

这行代码以 a or b or c来解释or的用法,  

当a为真时,直接返回a(也就是真),b和c不再去看它;

当a为假,看b,如果b为真,就返回b(也就是真),c不再去看它

当a,b为假,c为真,就返回c(也就是真)

当a,b,c都为假,就直接返回a(也就是假)

False(假)包括0(包括0.0等)、None、''和空集等情况

代码如下:

# 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来输出链表
        return l3.next

2.两数相加-Python-LeetCode_第1张图片

文中有什么描述不当的请谅解!

你可能感兴趣的:(LeetCode)