2.两数相加

2. 两数相加

  1. 题目链接:https://leetcode-cn.com/problems/add-two-numbers/

  2. 思路:

    1. 创建一个新链表ans用于储存和,遍历l1,l2加和
    2. cnt判断进位,遍历ans链表,如果val >= 10cnt = trueval %= 10;
    3. 上一步的最后一步是进行判断链表的最后一个节点能否仅进位,但是他没有下一个节点进行进位操作,所以我们需要加入一个新的节点,进行进位
  3. 代码:

    /**
     * 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* addNewListNodeTail(ListNode *list, ListNode *p){
            if(list == nullptr) list = p;
            else{
                ListNode *head = list;
                while(head -> next != nullptr){
                    head = head -> next;
                }
                head -> next = p;
            }
            return list;
        }
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
            ListNode *ans = nullptr;
            while(l1 || l2){
                ListNode *p = new ListNode(0, nullptr);
    
                if(l1){
                    p -> val += l1 -> val;
                    l1 = l1 -> next;
                }
    
                if(l2){
                    p -> val += l2 -> val;
                    l2 = l2 -> next;
                }
                
                ans = addNewListNodeTail(ans, p);
            }
    
            ListNode *head = ans;
            bool cnt = false;
    
    
            while(head){
                if(cnt == true){
                    head -> val ++;
                    cnt = false;
                }
                if(head -> val >= 10){
                    cnt = true;
                    head -> val %= 10;
                }
                head = head -> next;
            }
            if(cnt == true){
                ListNode *p = new ListNode(1, nullptr);
                ans = addNewListNodeTail(ans, p);
                        }
    
            return ans;
    
        }
    };
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值