程序分为两个部分:
1. 翻转链表
2. 进位相加
	取值(由于当指针为空不允许value域作加减运算,且要依据空指针作为结束循环条件,所以这么用)
	进位加法
	赋值(分配链接新节点)

最麻烦的就是指针越界问题,希望随着经验增加,可以快速解决吧。
纠结变量用的有点多,C语言编写,寻求改进办法,请指教!
/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
struct ListNode* convertLinkList( struct ListNode *L){
    //翻转链表
    if ( L->next == NULL )
        return L;
    struct ListNode *pre, *cur, *next;
    pre = L; cur = pre->next; next = cur->next;
    pre->next = NULL;
    
    while( cur !=NULL )
    {
        cur->next = pre;
        pre = cur; cur = next; 
        if ( next != NULL )
            next = next->next;
    }
    return pre;
}
/**
 * 
 * @param head1 ListNode类 
 * @param head2 ListNode类 
 * @return ListNode类
 */
struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) {
    // write code here
    struct ListNode *p, *q;
    struct ListNode  *res;
    struct ListNode  *m,*n;
    int value = 0;
    int pre = 0;
    int v1, v2;
    
    p = convertLinkList(head1);
    q = convertLinkList(head2);
    //“1”分配一个头节点,如果不先分配,只是空指针在程序下面语句 “2”处,将报错无法执行 
    m = res = (struct ListNode *)malloc( sizeof( struct ListNode) );
    m->next = NULL;
    
    while ( p || q || pre == 1)
    {
    //
        if( p != NULL )
        {
            v1 = p->val;
            p = p->next;
        }
        else v1 = 0;
        if( q != NULL )
        {
            v2 = q->val;
            q = q->next;
        }
        else v2 = 0;
        
        value = v1 +v2 + pre;
        if ( value >= 10 )
        {
            pre = 1;
            value  = value % 10;
        }
        else pre = 0;
        
        n = (struct ListNode *)malloc( sizeof( struct ListNode) );
        n->val = value;
        n->next = NULL;
        m->next = n;//-------------------"2"
        m = n;
    }
    //这里因为上面实现分配了一个空节点,所以避免返回空节点而返回第二个开始,并翻转一次,得到正确结果。
    return convertLinkList(res->next);
}