Medium
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example 1:
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.
Example 2:
Input: l1 = [0], l2 = [0]
Output: [0]
Example 3:
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]
Constraints:
[1, 100]
.0 <= Node.val <= 9
To solve the Add Two Numbers problem in Swift using a Solution
class, we’ll follow these steps:
ListNode
class to represent nodes in a linked list.Solution
class with a method named addTwoNumbers
.addTwoNumbers
method, traverse both input linked lists simultaneously:
Here’s the implementation:
/**
* Definition for singly-linked list.
* public class ListNode {
* public var val: Int
* public var next: ListNode?
* public init() { self.val = 0; self.next = nil; }
* public init(_ val: Int) { self.val = val; self.next = nil; }
* public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
* }
*/
class Solution {
func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
return addNumbers(l1, l2, 0)
}
func addNumbers(_ l1: ListNode?, _ l2: ListNode?, _ carryOver: Int) -> ListNode? {
guard !(l1 == nil && l2 == nil && carryOver == 0 ) else { return nil }
let sum = ( l1?.val ?? 0 ) + ( l2?.val ?? 0 ) + carryOver
let carryOver = sum / 10
let value = sum % 10
return ListNode(value, addNumbers(l1?.next, l2?.next, carryOver))
}
}
This implementation provides a solution to the Add Two Numbers problem using linked lists in Swift.