题解 | #链表相加(二)#
链表相加(二)
http://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
// 反转链表 + 注意补位
func addInList( head1 *ListNode , head2 *ListNode ) *ListNode {
// write code here
node1, size1 := Reverse(head1)
node2, size2 := Reverse(head2)
long := &ListNode{0,nil}
head := long
if size1 >= size2 {
long.Next = node1
} else {
long.Next = node2
}
var upBit int = 0
var tmp int = 0
for node1 != nil || node2 != nil {
if node1 != nil {
tmp += node1.Val
node1 = node1.Next
}
if node2 != nil {
tmp += node2.Val
node2 = node2.Next
}
tmp += upBit
upBit = tmp / 10
long.Next.Val = tmp % 10
long = long.Next
tmp = 0
}
if upBit != 0 {
long.Next = &ListNode{upBit, nil}
}
rev, _ := Reverse(head.Next)
return rev
}
func Reverse(head *ListNode) (*ListNode, int) {
var prev, next *ListNode
var size int = 0
for (head != nil) {
size++
next = head.Next
head.Next = prev
prev = head
head = next
}
return prev, size
}