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

2.两数相加(python 链表ListNode),第1张

两数相加 难点:进位的保存,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]))

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/870465.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-13
下一篇2022-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存