题目:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ad… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
head1, head2 := l1, l2
dummy := &ListNode{}
head := dummy
carry := 0
for head1 != nil || head2 != nil {
val1, val2 := 0, 0
if head1 != nil {
val1 = head1.Val
head1 = head1.Next
}
if head2 != nil {
val2 = head2.Val
head2 = head2.Next
}
val := val1 + val2 + carry
if val > 9 {
// 计算carry和val容易搞错
carry = 1
val = val % 10
} else {
carry = 0
}
newNode := &ListNode{
Val: val,
}
head.Next = newNode
head = head.Next
}
// 注意最后看是否还有进位
if carry == 1 {
head.Next = &ListNode{Val:1}
}
return dummy.Next
}