leetcode 2 两数相加

class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *head = nullptr, *tail = nullptr; //head和tail所构建的节点为结果链表
int carry = 0; //首先把进位的值设为0
while (l1 || l2) { //当链表l1和l2都不为空时
int n1 = l1 ? l1->val: 0; //三目运算符,若l1是不是空指针,则返回l1的value,否则返回0
int n2 = l2 ? l2->val: 0;
int sum = n1 + n2 + carry; //sum要加上上一步运算后进位的值
if (!head) { //若head为空
head = tail = new ListNode(sum % 10); //head=tail等于新的节点,节点中value=sum%10;
//new函数是构建新对象特别好的方法,重点学习

        } else {
            tail->next = new ListNode(sum % 10);            //head不为空,从tail向下构建新节点
            tail = tail->next;
        }
        carry = sum / 10;
        if (l1) {
            l1 = l1->next;              //若l1不为空指针,即下一个节点还有值,就跳向下一个节点
        }
        if (l2) {
            l2 = l2->next;
        }
    }
    if (carry > 0) {                    //最后一步相加后,有进位的值,新建节点存储进位的carry
        tail->next = new ListNode(carry);
    }
    return head;
}

};

你可能感兴趣的:(leetcode 2 两数相加)