LeetCode第二题(两数相加)

259 阅读1分钟

解题思路

C++

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* res = new ListNode(-1);//用于存放结果
        ListNode* cur = res;//res的移动指针
        ListNode* p1 = l1;//l1的移动指针
        ListNode* p2 = l2;//l2的移动指针
        int sum = 0;//用于记录每一位相加的结果
        int carry = 0;//进位
        while(p1 != NULL || p2 != NULL){
            int a = (p1 == NULL)? 0 : p1->val;//记录l1当前位的值
            int b = (p2 == NULL)? 0 : p2->val;//记录l2当前位的值
            sum = a + b + carry;//每一位相加
            ListNode* s = new ListNode(sum % 10);//创建一个新结点保存当前位相加的结果
            cur->next = s;
            cur = s;
            carry = sum / 10;//记录当前位相加结果的进位
            if(p1 != NULL)
                p1 = p1->next;
            if(p2 != NULL)
                p2 = p2->next;
        }
        if(carry > 0)//最高位有进位
            cur->next = new ListNode(carry);
        return res->next;
    }
};

Java

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode L = new ListNode(0);
        ListNode cur = L;
        ListNode La = l1;
        ListNode Lb = l2;
        int carry = 0;
        while(La != null || Lb != null){
            int a = (La == null)? 0 : La.val;
            int b = (Lb == null)? 0 : Lb.val;
            int sum = a + b + carry;
            cur.next = new ListNode(sum % 10);
            carry = sum / 10;
            cur = cur.next;
            if(La != null){
                La = La.next;
            }
            if(Lb != null){
                Lb = Lb.next;
            }
        }
        if(carry > 0){
            cur.next = new ListNode(carry);
        }
        return L.next;
    }
}