两数相加python

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

 

img

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的代码是:
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
if l1[-1]!=0 and l2[-1]!=0:
c=0
d=0
e=0
f=0
m=[]
for i in l1:
c+=i*pow(10,d)
d+=1
for j in l2:
e += j * pow(10, f)
f += 1
g=c+e
h=str(g)
for k in h:
m.append(int(k))
return(m[-1::-1])
elif l1[-1]==0 and l2[-1]==0:
return([0])

它提示我:listnode object is not subscritable,代码的第一行就报错了,但我在pycharm中是可以正常运行的,请教一下大家是哪里有问题呢?还是pycharm和力扣上的编译环境不一样呢?

img


给你正确答案


class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = curr = ListNode()
        carry = val = 0

        while carry or l1 or l2:
            val = carry

            if l1: l1, val = l1.next, l1.val + val
            if l2: l2, val = l2.next, l2.val + val

            carry, val = divmod(val, 10)
            curr.next = curr = ListNode(val)
        
        return head.next

代码格式又有问题:修改如下

class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
  if l1[-1]!=0 and l2[-1]!=0:
    c=0
    d=0
    e=0
    f=0
    m=[]
    for i in l1:
      c+=i*pow(10,d)
      d+=1
    for j in l2:
      e += j * pow(10, f)
      f += 1
    g=c+e
    h=str(g)
    for k in h:
      m.append(int(k))
    return(m[-1::-1])
  elif l1[-1]==0 and l2[-1]==0:
    return([0])

考你的是链表,你返回个列表
还是先回去复习什么叫链表再写作业吧