leetcode两数相加

冲冲冲

题目要注意的点

1.l1和l2这俩链表的长度可能不相等。如果l1比l2长3个节点,那l2少的这3个节点就要设为0。

2.观察示例可知,将对应节点依次相加,然后往右进位即可。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *head = nullptr, *tail = nullptr;  //建立新链表的头尾部节点为nullptr
        int carry = 0;         //进位数
        while(l1 || l2)             //如果l1,l2中有一个没有走到尾结点(长度可能不相等),即当前节点->next非空,继续
        {
            int add1 = l1? l1->val:0;        //如果l1,l2头节点非空,将节点的值赋给add1,add2,否则赋0
            int add2 = l2? l2->val:0;            

            int temp = add1 + add2 + carry;   //记录l1,l2对应节点相加的值,记得进位数。
            carry = temp / 10;        //判断节点相加的值是否大于10,如果是则进位数置为1。
            if(!head)
            {
                head = tail = new ListNode(temp%10);//这是新链表的第一个数,此时头节点=尾节点
            }
            else
            {
                tail->next = new ListNode(temp%10); //在非空链表中新增一个节点,原来的尾结点指向新增节点
                tail = tail->next;   //更新尾结点
            }

            if(l1)                 //如果当前l1,l2非空,则递增到下一节点
                l1 = l1->next;     //注意,这里的两个if判断是必须的,因为l1和l2长度可能不等。l1较长时,l2缺失的那些节点置为0.
            if(l2)
                l2 = l2->next;

        }
        if(carry>0)               //如果尾节点相加大于10,说明要新增一位,值为1。
        {
            tail->next = new ListNode(1);
            tail = tail -> next;
        }
        return head;       //返回新链表的头结点。
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值