题解 | #链表相加(二)#

链表相加(二)

http://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    ListNode* addInList(ListNode* head1, ListNode* head2) {
        // write code here
        if(!head1) return head2; //翻转链表,从个位开始加
        if(!head2) return head1;
        head1 = reverse(head1);
        head2 = reverse(head2);
        ListNode* ans = new ListNode(-1);
        ListNode* cur = ans;
        int tmp = 0; //tmp为进位值
        while(head1 || head2){ //当节点不为空时
            int val = tmp; //val为当前位之和,val = 进位值 + head1当前位值 + head2当前位值
            if(head1){
                val += head1->val;
                head1 = head1->next;
            }
            if(head2){
                val += head2->val;
                head2 = head2->next;
            }
            tmp = val / 10;
            ListNode* tmpNode = new ListNode(val%10);
            cur->next = tmpNode;
            cur = cur->next;
        }
        
            return reverse(ans->next);
    }
    
    ListNode* reverse(ListNode* head){
        if(!head) return nullptr;
        ListNode* pre = nullptr;
        ListNode* nex = nullptr;
        ListNode* cur = head;
        while(cur){
            nex = cur->next;
            cur->next = pre;
            pre = cur;
            cur = nex;
        }
        return pre;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
10-15 10:23
门头沟学院 Java
牛可乐的头像真牛:赶紧举报,这公司绝对是诈骗的,等你签约后工作一两个月后根据合同漏洞把你开除,并且要求你赔偿3w培训费,996是为了提前筛选心甘情愿签下合同容易受骗的群体,纯粹面向校招生精心设计的骗局
你见过哪些工贼行为
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务