链表(3)

两数相加

算法分析:

  • 对链表中的结点直接相加,把相加的结果存储在新的链表中
  • 每组结点相加后需要记录其是否有进位
  • 如果两个链表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
}
复制代码
分类:
代码人生
标签: