LeetCode兩數相加Swift
阿新 • • 發佈:2020-09-18
給出兩個非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。
如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807
演算法思路:
1.遍歷兩個表node 2.計算新表node點sum value 3.由於第一個節點不需要計算carry值,導致邏輯不一致,故先預設建立一個初始node4.最後新增進位產生的新node 5.返回新建node.next指向的表(不包含初始node)
解法:
/** * Definition for singly-linked list. * public class ListNode { * public var val: Int * public var next: ListNode? * public init(_ val: Int) { * self.val = val * self.next = nil * } * } */ class Solution { func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { let result: ListNode = ListNode(0) var p: ListNode? = l1 var q: ListNode? = l2 var head = result var carry = 0 while (p != nil)||(q != nil) { let sum= (p?.val ?? 0) + (q?.val ?? 0) + carry carry = sum / 10 head.next = ListNode(sum%10) head = head.next! p = p?.next q = q?.next } if carry > 0 { head.next = ListNode(carry) } return result.next } }