leetcode2. 兩數相加](https://leetcode-cn.com/problems/add-two-numbers/)
阿新 • • 發佈:2020-11-13
給出兩個非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。 如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。 您可以假設除了數字 0 之外,這兩個數都不會以 0開頭。 示例: 輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807 來源:力扣(LeetCode) 連結:https://leetcode-cn.com/problems/add-two-numbers 著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
#方法一:將連結串列轉換成數,相加後再轉換成連結串列 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: #得到數 def getnum(l1:ListNode)->int: t=1 s=0 node=l1 while(node!=None): s+=t*node.val t=t*10 node=node.next return s num1=getnum(l1) num2=getnum(l2) sum=num1+num2 #再生成連結串列 tnone=ListNode() t=tnone while(sum//10!=0): v=sum%10 t.next=ListNode(v) sum=sum//10 t=t.next #加最後一項 t.next=ListNode(sum) return tnone.next
#方法2 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next # 連結串列每項相加,進位 class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: #連結串列長度 def length_of_listnode(l1:ListNode)->int: t=1 l=l1 while(l!=None): t+=1 l=l.next return t length1=length_of_listnode(l1) length2=length_of_listnode(l2) #保證l1較長 if(length1<length2): l1,l2=l2,l1 #進位 jw=0 #指向l1,l2的指標 p1=l1 p2=l2 #建立一個空連結串列 p=ListNode() pa=p#儲存新連結串列的首項 #每個數相加,進位 while(p2!=None): p.next=ListNode((p1.val+p2.val+jw)%10) jw=(p1.val+p2.val+jw)//10 p=p.next p1=p1.next p2=p2.next #如果有進位,p1 不空繼續新增新節點 while(jw and p1!=None): p.next=ListNode((p1.val+jw)%10) jw= (p1.val+jw)//10 p=p.next p1=p1.next if(not jw): p.next=p1 if(jw and p1==None): p.next=ListNode(jw) return pa.next