两数相加
算法分析:
- 对链表中的结点直接相加,把相加的结果存储在新的链表中
- 每组结点相加后需要记录其是否有进位
- 如果两个链表L1和L2的长度不痛,当对其中一个完成计算后,接下来只需要考虑另一个结点的值
- 对所有的链表完成计算后,还需要考虑是否还有进位,如果有进位,则需要增加新的结点,此结点的数据域为1
code
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
c1 := l1
c2 := l2
headNode := new(ListNode)
head := headNode
sum := 0
for c1 != nil || c2 != nil { //c1和c2 有一个每遍历完都继续
sum /= 10 //存储进位
if c1 != nil {
sum += c1.Val
c1 = c1.Next
}
if c2 != nil {
sum += c2.Val
c2 = c2.Next
}
head.Next = new(ListNode)
head.Next.Val = sum % 10 //赋值
head = head.Next
}
// 当链表l1 和链表 l2 最后一位有进位时,添加1
if sum / 10 == 1 {
head.Next = new(ListNode)
head.Next.Val = 1 //赋值
}
return headNode.Next
}
复制代码