手撕 leetcode 中难题 第一天

手撕 leetcode 中难题 第一天,第1张

手撕 leetcode 中难题 第一天

我感觉我蠢的要死


  • 环境 vscode + leetcode 插件
  • 语言使用 Cplus

1.两数相加问题
  
 
 

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        //使用的10 进制数
        #define base 10
            ListNode* StartNode = nullptr;
            ListNode* EndNode = nullptr;
            ListNode* CurrentNode = nullptr;

            int l1_num = 0;
            int l2_num = 0;
            int carray = 0;
            int deal_real_num = 0;

            while( l1 || l2) //同时遍历两个链表
            {
                l1_num = l1? l1->val : 0;
                l2_num = l2? l2->val : 0;
                deal_real_num = l1_num + l2_num + carray;

                CurrentNode = new ListNode(deal_real_num%base);                         //这个数据为肯定会被插入的数据

                if(StartNode)
                    EndNode = StartNode = CurrentNode;                                  //得到可以遍历的头部节点
                else{
                   EndNode->next = CurrentNode;                                                      //将新有的数据,挂载上一个的后面 
                }

                // 如果大于 1 则需要重新开一个节点, 这个主要是会迭代到最后才可以生效,所以不需要考虑中间进位的问题
                // 只考虑最后会进一位的问题
                carray = deal_real_num / base;

                //移动指针 直到遍历结束 
                if(l1){
                    l1 = l1->next; 
                }

                if(l2){
                    l2 = l2->next;
                }

                EndNode = CurrentNode; //更新尾部指针的位置
            }

            if(carray > 0){
                CurrentNode = new ListNode(1); //新开辟一个作为最后一个的空间
                CurrentNode->next = EndNode; //再插入一个新的节点
            }

            return StartNode; // 返回头部的指针,用于遍历指针是否正确
    }
};

有个大神是使用递归解决的

总结一下:
1. 取模运算 如果 a%b 在 a< b 的情况下 永远 返回 a # 我是真的没想起来
2. 这个算法在实际的生产中可以用到,当然不是做加法运算,而是用到,两个数据链的合并,根据条件动态增加,协议解析,应该是没得问题

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5670441.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存