Leetcode - 2. 两数相加

Github地址

思路

  • 因为整数是按照逆序存放在链表中,所以直接从头结点就可以开始相加
  • 老规矩,加上输入值判断
  • 两个数相加有可能产生进位, 所以下一个结点相加时需要考虑进位的1
  • 当一个数加完,另外一个还有节点, 只加这一个结点
  • 当最后两个结点都加完,但是进位还在
    考虑完毕

编写

按照上面的思路,按照正常逻辑写出如下代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        # 进行输入值判断
        if(l1 == None or l2 == None):
            return None
        sum = l1.val + l2.val #两个数相加的和
        resultList = ListNode(sum%10) #初始化结果链表
        p = resultList #中间指针
        while(l1.next != None and l2.next != None):
            l1 = l1.next
            l2 = l2.next
            sum = l1.val + l2.val + sum//10
            temp = ListNode(sum%10)
            p.next = temp
            p = p.next
        # 当l1不为空
        while(l1.next != None):
            l1 = l1.next
            sum = l1.val + sum//10
            temp = ListNode(sum%10)
            p.next = temp
            p = p.next
		# 当l2不为空
        while(l2.next != None):
            l2 = l2.next
            sum = l2.val + sum//10
            temp = ListNode(sum%10)
            p.next = temp
            p = p.next
		#还有进位时
        if(sum//10 == 1):
            temp = ListNode(1)
            p.next = temp
            p = p.next
        return resultList

思考与学习

  • 看了大神的代码, 发现自己的3个while循环,虽然逻辑很清楚,但是看着就很多,可以合并为一个
  • 怎么合并呢,发现三个while的判断都是链表是不是为空,可以这里下手
  • 于是得到下面的代码,代码明显减少,运行也快了一点
  • 代码带可以继续改进, 两个if和两个赋值0可以合并一下
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        # 进行输入值判断
        if(l1 == None or l2 == None):
            return None
        sum = l1.val + l2.val #两个数相加的和
        resultList = ListNode(sum%10) #初始化结果链表
        p = resultList #移动指针
        while(l1.next != None or l2.next != None):
            l1.val = 0
            l2.val = 0
            l1 = l1 if(l1.next==None) else l1.next
            l2 = l2 if(l2.next==None) else l2.next
            sum = l1.val + l2.val + sum//10
            temp = ListNode(sum%10)
            p.next = temp
            p = p.next
            
		#还有进位时
        if(sum//10 == 1):
            temp = ListNode(1)
            p.next = temp
            p = p.next
        return resultList
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章