蓝色秘法鞋

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 结构

posted on 2017-12-07 21:49  蓝色秘法鞋  阅读(145)  评论(0)    收藏  举报

导航