leetcode

2. Add Two Numbers

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0 -> 8Explanation: 342 + 465 = 807.

/*
 
 Definition for singly-linked list.
  type ListNode struct {
 
     Val int
      Next ListNode
  }
 
/
func addTwoNumbers(l1 ListNode, l2 ListNode) ListNode {
    i1 := 0
i2 := 0
p := l1
j := 0
for {
if p != nil {
i1 += p.Val 
 int(math.Pow(float64(10), float64(j)))
j++
p = p.Next
} else {
break
}
}
j = 0
p = l2
for {
if p != nil {
i2 += p.Val  int(math.Pow(float64(10), float64(j)))
j++
p = p.Next
} else {
break
}
}
revres := i1 + i2
    
    fmt.Println(revres)
head := new(ListNode)
p = head
for {
if revres == 0 {
break
} else {
p.Val = revres % 10            
revres = revres / 10
            if revres != 0{
             node := new(ListNode)
    p.Next = node
    p = p.Next        
            }
}
}
    
    
    p = l1
for {
if p.Next == nil {
break
}
fmt.Printf("%dt", p.Val)
p = p.Next
}
    
    
return head
    
    
}

  后面出现了位数很长的用例,所以换成采用数组来暂存单链表

func addTwoNumbers(l1 ListNode, l2 ListNode) ListNode {
var i1 []int
var i2 []int
p := l1
for {
if p != nil {
i1 = append(i1, p.Val)
p = p.Next
} else {
break
}
}
p = l2
for {
if p != nil {
i2 = append(i2, p.Val)
p = p.Next
} else {
break
}
}
head := new(ListNode)
p = head
lenthi1 := len(i1)
lenthi2 := len(i2)
if lenthi1 != lenthi2 {
if lenthi1 < lenthi2 {
for i := 0; i < lenthi2-lenthi1; i++ {
i1 = append(i1, 0)
}
} else {
for i := 0; i < lenthi1-lenthi2; i++ {
i2 = append(i2, 0)
}
}
}
lenthi1 = len(i1)
lenthi2 = len(i2)
flag := 0
for i, _ := range i1 {
sum := i1[i] + i2[i]
if i < lenthi1-1 {
if (sum)/10 > 0 {
i1[i+1] += 1
}
} else {
if (sum)/10 > 0 {
flag = 1
}
}
p.Val = sum % 10
if i < lenthi1-1 {
node := new(ListNode)
p.Next = node
p = p.Next
}
}
if flag == 1 {
node := new(ListNode)
node.Val = 1
p.Next = node
}
return head
}