Add Two Numbers
1 # Definition for singly-linked list. 2 # class ListNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution: 8 def addTwoNumbers(self, l1, l2): 9 """ 10 :type l1: ListNode 11 :type l2: ListNode 12 :rtype: ListNode 13 """ 14 flag=0 15 l3=ListNode((l1.val+l2.val)%10) 16 if (l1.val+l2.val)>9: 17 flag=1 18 l4=l3 19 while l1.next!=None or l2.next!=None: 20 if l1.next!=None and l2.next!=None: 21 l3.next=ListNode((l1.next.val+l2.next.val+flag)%10) 22 if (l1.next.val+l2.next.val+flag)>9: 23 flag=1 24 else: 25 flag=0 26 l1=l1.next 27 l2=l2.next 28 l3=l3.next 29 elif l1.next==None and l2.next!=None: 30 l3.next=ListNode((l2.next.val+flag)%10) 31 if (l2.next.val+flag)>9: 32 flag=1 33 else: 34 flag=0 35 l2=l2.next 36 l3=l3.next 37 elif l1.next!=None and l2.next==None: 38 l3.next=ListNode((l1.next.val+flag)%10) 39 if (l1.next.val+flag)>9: 40 flag=1 41 else: 42 flag=0 43 l1=l1.next 44 l3=l3.next 45 if flag==1: 46 l3.next=ListNode(1) 47 return l4
flag表示进位符号,
评论区思路相似的简洁代码如下:
1 # Definition for singly-linked list. 2 # class ListNode(object): 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution(object): 8 def addTwoNumbers(self, l1, l2): 9 """ 10 :type l1: ListNode 11 :type l2: ListNode 12 :rtype: ListNode 13 """ 14 ret = ListNode(0) 15 cur = ret 16 add = 0 17 18 while l1 or l2 or add: 19 val = (l1.val if l1 else 0) + (l2.val if l2 else 0) + add 20 add = val / 10 21 cur.next = ListNode(val % 10) 22 cur = cur.next 23 l1 = l1.next if l1 else None 24 l2 = l2.next if l2 else None 25 26 return ret.next
给自己的小tips:
1. is None可以省略
2 被赋值元素相同 可以用if A else B 结构
浙公网安备 33010602011771号