我感觉我蠢的要死
- 环境 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. 这个算法在实际的生产中可以用到,当然不是做加法运算,而是用到,两个数据链的合并,根据条件动态增加,协议解析,应该是没得问题
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)