给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
carry := 0 //进位
head := new(ListNode)
sum := l1.Val + l2.Val
if sum > 9 {
head.Val = sum % 10
carry = sum / 10
} else {
head.Val = sum
}
l1 = l1.Next
l2 = l2.Next
p := head
for l1 != nil || l2 != nil || carry != 0 {
l1value := 0
l2value := 0
if l1 != nil {
l1value = l1.Val
l1 = l1.Next
}
if l2 != nil {
l2value = l2.Val
l2 = l2.Next
}
sum = l1value + l2value + carry
carry = 0
if sum == 0 && l1 == nil && l2 == nil{
break
}
newNode := new(ListNode)
p.Next = newNode //新节点挂到链表后边
p = p.Next //p后移
if sum > 9 {
newNode.Val = sum % 10
carry = sum / 10
} else {
newNode.Val = sum
}
}
return head
}