1. 程式人生 > 實用技巧 >LeetCode兩數相加Swift

LeetCode兩數相加Swift

給出兩個非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。

如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。

您可以假設除了數字 0 之外,這兩個數都不會以 0開頭。

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807

演算法思路:

1.遍歷兩個表node

2.計算新表node點sum value

3.由於第一個節點不需要計算carry值,導致邏輯不一致,故先預設建立一個初始node

4.最後新增進位產生的新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 } }