leetcode2

2021-07-12  本文已影响0人  大写的空气

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

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; }
}
//两数相加
//输入:l1 = [2,4,3], l2 = [5,6,4]
//输出:[7,0,8]
//解释:342 + 465 = 807.
class Solution {
    class func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
        guard var node1 = l1, var node2 = l2 else{
            return nil   //两个链表不能为空
        }
        var sums = ListNode()
        var currentNode = sums
        var flags = (node1.val + node2.val)/10  //进位标记
        sums.val = (node1.val + node2.val)%10
        while node1.next != nil || node2.next != nil {
            let node = ListNode()
            let value = (node1.next?.val ?? 0) + (node2.next?.val ?? 0) + flags
            node.val = value % 10
            flags = value / 10
            currentNode.next = node
            currentNode = node
            if node1.next != nil {
                node1 = node1.next!
            }
            if node2.next != nil {
                node2 = node2.next!
            }
            print("循环了")
        }
        if flags > 0 {  //最后一个数进位处理
            let node = ListNode()
            node.val = flags
            currentNode.next = node
        }
        while sums.next != nil {
            print(sums.val)
            sums = sums.next!
        }
        print(sums.val)
        return sums
    }
}
let lnode1 = ListNode(0)
        let lnode2 = ListNode(1)
        lnode1.next = lnode2
        let lnode3 = ListNode(2)
        lnode2.next = lnode3
        let lnode4 = ListNode(3)
        lnode3.next = lnode4
        let lnode5 = ListNode(4)
        lnode4.next = lnode5
        let lnode6 = ListNode(5)
        lnode5.next = lnode6
        let lnode7 = ListNode(6)
        lnode6.next = lnode7
        let lnode8 = ListNode(7)
        lnode7.next = lnode8
        let lnode9 = ListNode(8)
        lnode8.next = lnode9
        
        let rnode1 = ListNode(6)
        let rnode2 = ListNode(6)
        rnode1.next = rnode2
        let rnode3 = ListNode(7)
        rnode2.next = rnode3
        let rnode4 = ListNode(8)
        rnode3.next = rnode4
        let rnode5 = ListNode(9)
        rnode4.next = rnode5
        
        let _ = Solution.addTwoNumbers(lnode1, rnode1)
上一篇下一篇

猜你喜欢

热点阅读