两数相加
难点:进位的保存,next值的处理,python中链表节点值的添加方式r.next = ListNode(s%10)。
在本机pycharm上运行需要添加上ListNode函数
class ListNode():
def __init__(self, val):
if isinstance(val, int):
self.val = val
self.next = None
elif isinstance(val, list):
self.val = val[0]
self.next = None
cur = self
for i in val[1:]:
cur.next = ListNode(i)
cur = cur.next
def gatherAttrs(self):
return ", ".join("{}: {}".format(k, getattr(self, k)) for k in self.__dict__.keys())
def __str__(self):
return self.__class__.__name__ + " {" + "{}".format(self.gatherAttrs()) + "}"
def addTwoNumbers(l1, l2):
if isinstance(l1, list):
l1 = ListNode(l1)
l2 = ListNode(l2)
re = ListNode(0)#创建一个空链表来保存结果
r = re #r指向首指针
carry = 0#创建一个变量来保存进位的结果
re_next = 0#创建一个value_next 来保存进位的结果
while(l1 or l2):
x = l1.val if l1 else 0
y = l2.val if l2 else 0
s = x + y + carry
carry = s//10
r.next = ListNode(s%10) #首指针的next值为s%0
r = r.next #r指向第下一个值
if(l1!=None):l1 = l1.next#移向下一个结点取值
if(l2!=None):l2 = l2.next
#循环结束之后,注意如果还有进位需要保存
if(carry>0):
r.next = ListNode(1)
return re.next
print(addTwoNumbers([2,4,3],[5,6,4]))