美文网首页
剑指 Offer II 025. 链表中的两数相加

剑指 Offer II 025. 链表中的两数相加

作者: 邦_ | 来源:发表于2022-04-21 08:57 被阅读0次

想到的就是逆序相加 然后进位 注意最后一个位置进位之后 需要多一个节点 时间和空间上貌似都不是很好


截屏2022-04-15 下午6.54.57.png

func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
        
        var temp1 = reverseList(l1)
        var temp2 = reverseList(l2)
        var endNode : ListNode? = nil
        var count = 0
        while (temp1 != nil) || (temp2 != nil) {
           var sum = (temp1?.val ?? 0) + (temp2?.val ?? 0) + count
           count = sum / 10
            sum = sum % 10
           let node = ListNode(sum)
            node.next = endNode
            endNode = node
            temp1 = temp1?.next
            temp2 = temp2?.next
        }

        if count > 0 {
            return  ListNode(count,endNode)
        }

        

        return endNode
        
      
    }


    func reverseList(_ head: ListNode?) -> ListNode? {
        
        
        if head == nil {
            return nil
        }
        var oldHead = head
        var endNode : ListNode? = nil
        
        while oldHead != nil {
             
           //先保存下一个节点
           let temp = oldHead?.next
           //把下一个节点指向前一个节点
            oldHead?.next = endNode
            //当前节点赋值
            endNode = oldHead
            //保存的节点重置原来的头结点,让可以继续往下走
            oldHead = temp
            
        }
        
        return endNode
    
    }

相关文章

网友评论

      本文标题:剑指 Offer II 025. 链表中的两数相加

      本文链接:https://www.haomeiwen.com/subject/kosqertx.html