| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package main
- import (
- "fmt"
- )
- type ListNode struct {
- Val int
- Next *ListNode
- }
- func (l *ListNode) Print() {
- var tmp *ListNode = l
- for tmp != nil {
- fmt.Printf("%v", tmp.Val)
- tmp = tmp.Next
- }
- fmt.Printf("\n")
- }
- func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
- var l1Tmp *ListNode = l1
- var l2Tmp *ListNode = l2
- var ret *ListNode = &ListNode{-1, nil}
- var retTail *ListNode = ret
- var buf int = 0
- for l1Tmp != nil && l2Tmp != nil {
- retTail.Val = l1Tmp.Val + l2Tmp.Val
- if buf != 0 {
- retTail.Val += buf
- }
- buf = retTail.Val / 10
- retTail.Val %= 10
- l1Tmp = l1Tmp.Next
- l2Tmp = l2Tmp.Next
- if l1Tmp != nil || l2Tmp != nil {
- retTail.Next = &ListNode{-1, nil}
- retTail = retTail.Next
- }
- }
- for l1Tmp != nil {
- retTail.Val = l1Tmp.Val
- if buf != 0 {
- retTail.Val += buf
- buf = retTail.Val / 10
- retTail.Val %= 10
- }
- l1Tmp = l1Tmp.Next
- if l1Tmp != nil {
- retTail.Next = &ListNode{-1, nil}
- retTail = retTail.Next
- }
- }
- for l2Tmp != nil {
- if retTail == nil {
- retTail = &ListNode{-1, nil}
- }
- retTail.Val = l2Tmp.Val
- if buf != 0 {
- retTail.Val += buf
- buf = retTail.Val / 10
- retTail.Val %= 10
- }
- l2Tmp = l2Tmp.Next
- if l2Tmp != nil {
- retTail.Next = &ListNode{-1, nil}
- retTail = retTail.Next
- }
- }
- if buf != 0 {
- retTail.Next = &ListNode{buf, nil}
- retTail = retTail.Next
- }
- return ret
- }
- func arrayToListNode(l []int) *ListNode {
- var i int = 0
- var res ListNode = ListNode{l[i], nil}
- var tmp *ListNode = &res
- i++
- for ; i < len(l); i++ {
- tmp.Next = &ListNode{l[i], nil}
- tmp = tmp.Next
- }
- return &res
- }
- func main() {
- // tmp11 := ListNode{3, nil}
- // tmp12 := ListNode{4, &tmp11}
- // var l1 ListNode = ListNode{2, &tmp12}
- var l1 *ListNode = arrayToListNode([]int{0})
- fmt.Printf("l1 => ")
- l1.Print()
- var l2 *ListNode = arrayToListNode([]int{2, 7, 8})
- fmt.Printf("l2 => ")
- l2.Print()
- // fmt.Printf("res => ")
- addTwoNumbers(l1, l2).Print()
- }
|