我感觉我蠢的要死
- 环境 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. 这个算法在实际的生产中可以用到,当然不是做加法运算,而是用到,两个数据链的合并,根据条件动态增加,协议解析,应该是没得问题



