leetcode_2. Add Two Numbers 求单链表表示的两个数相加的和,也用单链表表示(数字全部倒序表示)

class Solution(object):
def addTwoNumbers(self, l1, l2):
“”"
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
“”"

    if l1 == None and l2 == None :
        return "It's empty!"

    carry = 0     #进位
    add_temp = 0   #两个数字相加结果
    result = ListNode(0)    #记录结果
    p = l1    #指向L1, 遍历L1
    q = l2    #指向L2, 遍历L2
    cur = result 

    if p != None and q != None :
        add_temp = p.val + q.val + carry
        carry = add_temp/10
        result.val =  add_temp%10
        p = p.next
        q = q.next

    while p != None and q != None :
        add_temp = p.val + q.val + carry
        carry = add_temp/10
        temp_node = ListNode(0)
        temp_node.val = add_temp%10
        cur.next = temp_node
        cur = cur.next
        p = p.next
        q = q.next


    while p != None :
        add_temp = p.val + carry
        carry = add_temp/10
        temp_node = ListNode(0)
        temp_node.val = add_temp%10
        cur.next = temp_node
        cur = cur.next
        p = p.next

    while q != None :
        add_temp = q.val + carry
        carry = add_temp/10
        temp_node = ListNode(0)
        temp_node.val = add_temp%10
        cur.next = temp_node
        cur = cur.next
        q = q.next

    if carry > 0 :
        temp_node = ListNode(0)
        temp_node.val = carry
        cur.next = temp_node

    return result

修改后,通过在循环里面增加判断,缩短了代码。另外,头结点直接不存储结果,直接返回头结点的下一个结点,也缩短了代码:
class Solution(object):
def addTwoNumbers(self, l1, l2):
“”"
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
“”"

    if l1 == None and l2 == None :     
        return "It's empty!"

    carry = 0     #进位
    add_temp = 0   #两个数字相加结果
    result = ListNode(0)    #记录结果
    p = l1    #指向L1, 遍历L1
    q = l2    #指向L2, 遍历L2
    cur = result 

    while p != None or q != None :
        if p != None :
            x = p.val
        else :
            x = 0
        if q != None :
            y = q.val
        else :
            y = 0
        add_temp = x + y + carry
        carry = add_temp/10
        cur.next = ListNode(add_temp%10)
        cur = cur.next
        if  p != None :
            p = p.next
        if q != None :
            q = q.next

    if carry > 0 :
        cur.next = ListNode(carry)

    return result.next

笔记:
单链表创建:temp_node = ListNode(0)
注意if与while的区别
修改后,通过在循环里面增加判断,缩短了代码。另外,头结点直接不存储结果,直接返回头结点的下一个结点,也缩短了代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值