想到的就是逆序相加 然后进位 注意最后一个位置进位之后 需要多一个节点 时间和空间上貌似都不是很好
截屏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
}
网友评论