反转链表
package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 
 * @param head1 ListNode类 
 * @param head2 ListNode类 
 * @return ListNode类
*/
func addInList( head1 *ListNode ,  head2 *ListNode ) *ListNode {
      rl1, rl2 := reverse(head1), reverse(head2)
    newHead := &ListNode{}
    cur := newHead
    plus := 0

    for rl1 != nil || rl2 != nil {
        node := &ListNode{Val: plus}
        if rl1 != nil {
            node.Val += rl1.Val
            rl1 = rl1.Next
        }
        if rl2 != nil {
            node.Val += rl2.Val
            rl2 = rl2.Next
        }
        plus = node.Val/10
        node.Val %= 10
        cur.Next = node
        cur = cur.Next
    }

    if plus > 0 {
        cur.Next = &ListNode{Val: plus}
    }

    return reverse(newHead.Next)
}

func reverse(head *ListNode) *ListNode {
    var pre *ListNode
    cur := head
    for cur != nil {
        nxt := cur.Next
        cur.Next = pre
        pre = cur
        cur = nxt
    }
    return pre
}