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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章