package main

import . "nc_tools"

/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param l1 ListNode类
 * @param l2 ListNode类
 * @return ListNode类
 */
func addEnergyValues(l1 *ListNode, l2 *ListNode) *ListNode {
	// write code here
	if l1 == nil && l2 == nil {
		return nil
	}
	dummy := &ListNode{Val: 0, Next: nil}
	x, y := 0, 0
	carry := 0
	current := dummy
	for l1 != nil || l2 != nil {
		x, y = 0, 0
		if l1 != nil {
			x = l1.Val
		}
		if l2 != nil {
			y = l2.Val
		}
		next := &ListNode{Val: (x + y + carry) % 10, Next: nil}
		current.Next = next
		current = current.Next
		carry = (x + y + carry) / 10
		if l1 != nil {
			l1 = l1.Next
		}
		if l2 != nil {
			l2 = l2.Next
		}
	}
	if carry > 0 {
		current.Next = &ListNode{Val: (x + y + carry) / 10, Next: nil}
	}
	return dummy.Next
}