2.两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
package main

import (
    "fmt"
)

type ListNode struct {
    Val  int
    Next *ListNode
}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    // 是否有进位
    left := 0
    ln := new(ListNode)
    next := &ln
    // 只要有一个不为空,或者上一次有进位,继续循环
    for l1 != nil || l2 != nil || left != 0 {
        if l1 != nil {
            left += l1.Val
            l1 = l1.Next
        }
        if l2 != nil {
            left += l2.Val
            l2 = l2.Next
        }
        // 这块才初始化,不会最后出现空的情况
        *next = &ListNode{
            Val:  left %10,
            Next: nil,
        }
        left = left / 10
        next = &((*next).Next)
    }
    return ln
}
答案:
func printListNode(l *ListNode) {
    var num []int
    for l != nil {
        num = append(num, l.Val)
        l = l.Next
    }
    fmt.Println(num)
}

func main() {
    //(2 -> 4 -> 3) + (5 -> 6 -> 4)
    l1 := ListNode{
        Val: 2,
        Next: &ListNode{
            Val: 4,
            Next: &ListNode{
                Val:  3,
                Next: nil,
            },
        },
    }
    l2 := ListNode{
        Val: 5,
        Next: &ListNode{
            Val: 6,
            Next: &ListNode{
                Val:  4,
                Next: nil,
            },
        },
    }
    printListNode(&l1)
    printListNode(&l2)
    printListNode(addTwoNumbers(&l1, &l2))
    //fmt.Println(addTwoNumbers(&l1, &l2))
}

你可能感兴趣的:(2.两数相加)