// @leet start
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func LLReverse(head *ListNode) *ListNode {
var p1, p2, p3 *ListNode
p3 = head
for p3!=nil {
p1 = p2
p2 = p3
p3 = p3.Next
p2.Next = p1
}
return p2
}
func doubleIt(head *ListNode) *ListNode {
num_node := LLReverse(head)
head = num_node
var carry int
for num_node!=nil {
num_node.Val = (num_node.Val * 2) + carry
carry = num_node.Val / 10
num_node.Val %= 10
if num_node.Next == nil {
break
}
num_node = num_node.Next
}
for carry > 0 {
var num ListNode
num.Val = carry % 10
carry /= 10
num_node.Next = &num
num_node = num_node.Next
}
head = LLReverse(head)
return head
}
// @leet end