| 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 overflow
 
- func 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 = 135
 
- func 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)))
 
- } */
 
 
  |