| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | package main/* type ListNode struct {	Val  int	Next *ListNode}*//* func list2str(head *ListNode) string {	curr := head	str := make([]rune, 0)	for curr != nil {		str = append(str, rune(curr.Val+'0'))		curr = curr.Next	}	return string(str)}*/func list2int(head *ListNode) int64 {	beg := head	res := int64(0)	for i := 1; beg != nil; i *= 10 {		res += int64(beg.Val * i)		beg = beg.Next	}	return res}func int2list(num int64) *ListNode {	head := &ListNode{int(num % 10), nil}	num /= 10	for tail := head; num != 0; num /= 10 {		tail.Next = &ListNode{int(num % 10), nil}		tail = tail.Next	}	return head}// will overflowfunc addTwoNumbersOld(l1 *ListNode, l2 *ListNode) *ListNode {	return int2list(list2int(l1) + list2int(l2))}/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */// (3->2->1) + (2->1) = (5->3->1), 123 + 12 = 135func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {	// get head of result list	head := &ListNode{(l1.Val + l2.Val) % 10, nil}	remain := int((l1.Val + l2.Val) / 10)	curr := head	l1 = l1.Next	l2 = l2.Next	// while l1 != [] and l2 != [], calculate l1 + l2	for l1 != nil && l2 != nil {		curr.Next = &ListNode{(l1.Val + l2.Val + remain) % 10, nil}		remain = int((l1.Val + l2.Val + remain) / 10)		curr = curr.Next		l1 = l1.Next		l2 = l2.Next	}	// l1 / l2 is nil (l1 == nil, l2 == nil, do nothing)	if l1 != nil {		curr.Next = &ListNode{(l1.Val + remain) % 10, l1.Next}		remain = int((l1.Val + remain) / 10)		curr = curr.Next	} else if l2 != nil {		curr.Next = &ListNode{(l2.Val + remain) % 10, l2.Next}		remain = int((l2.Val + remain) / 10)		curr = curr.Next	}	// add remainder	for remain != 0 {		if curr.Next != nil {			curr.Next.Val += remain			remain = int(curr.Next.Val / 10)			curr.Next.Val %= 10			curr = curr.Next		} else {			curr.Next = &ListNode{remain, nil}			remain = 0		}	}	return head}/* func main() {	l13 := ListNode{3, nil}	l12 := ListNode{2, &l13}	l1 := &ListNode{1, &l12}	l23 := ListNode{9, nil}	l22 := ListNode{9, &l23}	l2 := &ListNode{1, &l22}	fmt.Println(list2str(addTwoNumbers(l1, l2)))} */
 |