34
34
35
35
36
36
# Definition for singly-linked list.
37
- # class ListNode:
38
- # def __init__(self, x):
39
- # self.val = x
40
- # self.next = None
37
+ class ListNode :
38
+ def __init__ (self , x ):
39
+ self .val = x
40
+ self .next = None
41
+
41
42
42
43
class Solution :
43
- def addTwoNumbers (self , l1 , l2 ):
44
+ def addTwoNumbers (self , l1 : ListNode , l2 : ListNode ):
45
+ """
46
+ :type l1: ListNode
47
+ :type l2: ListNode
48
+ :rtype: ListNode
49
+ """
50
+ if not l1 or not l2 :
51
+ raise Exception ('l1 or l2 is None!' )
52
+ sum1 = sum2 = 0
53
+ k = 0
54
+ while l1 or l2 :
55
+ k += 1
56
+ if l1 :
57
+ sum1 += l1 .val * 10 ** k
58
+ l1 = l1 .next
59
+
60
+ if l2 :
61
+ sum2 += l2 .val * 10 ** k
62
+ l2 = l2 .next
63
+
64
+ # 获取逆序的数字字符
65
+ # sum_str = str(sum1 + sum2)
66
+ strs = str (sum1 + sum2 )[::- 1 ]
67
+ # 判断溢位
68
+ bit = max ([len (str (sum1 )), len (str (sum2 ))])
69
+ l = len (strs ) - bit
70
+ if l >= 0 and strs .startswith ('0' ) and len (strs ) > 1 :
71
+ strs = strs [1 :]
72
+ # 相差三位
73
+ sum_str = str (int (strs )) if len (strs ) > 3 and l >= 2 else strs
74
+ # sum_str = str(int(str(sum1 + sum2)[::-1]))
75
+ # 创建listNode
76
+ tmp = ListNode (0 )
77
+ for i in sum_str :
78
+ self .appendNext (tmp , int (i ))
79
+
80
+ res = tmp .next
81
+ return res
82
+
83
+ def appendNext (self , res , content ):
84
+ if res .next is None :
85
+ res .next = ListNode (content )
86
+ else :
87
+ self .appendNext (res .next , content )
88
+
89
+ def addTwoNumbers1 (self , l1 , l2 ):
44
90
"""
45
91
:type l1: ListNode
46
92
:type l2: ListNode
47
93
:rtype: ListNode
48
94
"""
49
-
95
+ if l1 is None :
96
+ return l2
97
+ if l2 is None :
98
+ return l1
99
+
100
+ tmp = ListNode (0 )
101
+ res = tmp
102
+ flag = 0
103
+ while l1 or l2 :
104
+ tmpsum = 0
105
+ if l1 :
106
+ tmpsum = l1 .val
107
+ l1 = l1 .next
108
+ if l2 :
109
+ tmpsum += l2 .val
110
+ l2 = l2 .next
111
+ tmpres = ((tmpsum + flag ) % 10 )
112
+ flag = ((tmpsum + flag ) // 10 )
113
+ res .next = ListNode (tmpres )
114
+ res = res .next
115
+ if flag :
116
+ res .next = ListNode (1 )
117
+ res = tmp .next
118
+ del tmp
119
+ return res
120
+
121
+
122
+ def pro (l1 , l2 ):
123
+ a = Solution ().addTwoNumbers (l1 , l2 )
124
+ print ('==============' )
125
+ while a is not None :
126
+ print (a .val )
127
+ a = a .next
128
+
129
+
130
+ if __name__ == '__main__' :
131
+ # 899
132
+ # 0 0
133
+ l1 = ListNode (0 )
134
+ l2 = ListNode (1 )
135
+ pro (l1 , l2 )
136
+ print ('+++++++++++++++' )
137
+
138
+ #
139
+ l1 = ListNode (0 )
140
+ l2 = ListNode (0 )
141
+ pro (l1 , l2 )
142
+ print ('+++++++++++++++' )
143
+
144
+ l1 = ListNode (8 )
145
+ l2 = ListNode (2 )
146
+ Solution ().appendNext (l1 , 9 )
147
+ Solution ().appendNext (l1 , 9 )
148
+ pro (l1 , l2 )
149
+ print ('+++++++++++++++' )
150
+
151
+ #
152
+ l1 = ListNode (5 )
153
+ l2 = ListNode (5 )
154
+ pro (l1 , l2 )
155
+ print ('+++++++++++++++' )
156
+
157
+ l1 = ListNode (2 )
158
+ l2 = ListNode (5 )
159
+ Solution ().appendNext (l1 , 4 )
160
+ Solution ().appendNext (l1 , 3 )
161
+ Solution ().appendNext (l2 , 6 )
162
+ Solution ().appendNext (l2 , 4 )
163
+ pro (l1 , l2 )
164
+ print ('+++++++++++++++' )
0 commit comments