/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
return addList(l1, l2)
// rL1 := reverseList(l1)
// rL2 := reverseList(l2)
// sumL := addList(rL1, rL2)
// return sumL
// return reverseList(sumL)
}
func addList(l1 *ListNode, l2 *ListNode) *ListNode {
if l1 == nil && l2 == nil {
return nil
}
addOne := 0
nNode := new(ListNode)
resNode := nNode
pNode := nNode
for l1 != nil && l2 != nil {
pNode = nNode
pNode.Val = (l1.Val + l2.Val + addOne) % 10
addOne = (l1.Val + l2.Val + addOne) / 10
nNode = new(ListNode)
pNode.Next = nNode
l1 = l1.Next
l2 = l2.Next
}
for l1 != nil {
pNode = nNode
pNode.Val = (l1.Val + addOne) % 10
addOne = (l1.Val + addOne) / 10
nNode = new(ListNode)
pNode.Next = nNode
l1 = l1.Next
}
for l2 != nil {
pNode = nNode
pNode.Val = (l2.Val + addOne) % 10
addOne = (l2.Val + addOne) / 10
nNode = new(ListNode)
pNode.Next = nNode
l2 = l2.Next
}
for addOne != 0 {
pNode = nNode
pNode.Val = addOne
addOne = 0
nNode = new(ListNode)
pNode.Next = nNode
}
pNode.Next = nil
return resNode
}
func reverseList(l *ListNode) *ListNode {
pNode := l
if pNode == nil {
return nil
}
cNode := pNode.Next
pNode.Next = nil
for cNode != nil {
nNode := cNode.Next
cNode.Next = pNode
pNode = cNode
cNode = nNode
}
return pNode
}