当前位置:   article > 正文

2.两数相加(python 链表ListNode)_listnode计算 python

listnode计算 python

两数相加

难点:进位的保存,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]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/859330
推荐阅读
相关标签
  

闽ICP备14008679号