leetcode刷题日记——两数相加

[ 题目描述 ]:

[ 思路 ]:

  • 通过两个循环将 l1, l2存储的数字读出,然后求和,再将结果存储链表中

  • 由此发了一个问题,结果溢出,如果使用更大的 long 类型,后续不出所料,仍然超出

  • 所以只能转换思路

    /**

    • Definition for singly-linked list.
    • struct ListNode {
    • 复制代码
      int val;
    • 复制代码
      struct ListNode *next;
    • };
      /
      struct ListNode
      addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
      int num1=0,num2=0,res=0,index=0;
      while(l1){
      num1=num1+l1->valpow(10,index++);
      l1=l1->next;
      }
      index=0;
      while(l2){
      num2=num2+l2->val
      pow(10,index++);
      l2=l2->next;
      }
      res=num1+num2;
      struct ListNode* head=(struct ListNode*)malloc(sizeof(struct ListNode));
      struct ListNode* rear=head;
      if(res==0){
      rear->next=(struct ListNode*)malloc(sizeof(struct ListNode));
      rear=rear->next;
      rear->val=0;
      }else{
      while(res!=0){
      rear->next=(struct ListNode*)malloc(sizeof(struct ListNode));
      rear=rear->next;
      rear->val=res%10;
      res/=10;
      }
      }
      rear->next=NULL;
      return head->next;
      }
  • 既然不能一次性存储所有结果,那么就只能模拟加法器,一位一位的计算

  • 运行如下

    struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    int carry=0;
    struct ListNode* head=(struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* rear=head;
    while(l1 || l2 || carry!=0){
    int num1=0,num2=0;
    if(l1){
    num1=l1->val;
    l1=l1->next;
    }
    if(l2){
    num2=l2->val;
    l2=l2->next;
    }
    carry+=num1+num2;
    rear->next=(struct ListNode*)malloc(sizeof(struct ListNode));
    rear=rear->next;
    rear->val=carry%10;
    carry/=10;
    }
    rear->next=NULL;
    return head->next;
    }

[ 官方题解 ]:

  • 方法一:模拟,具体思路同上
相关推荐
网络安全-杰克6 分钟前
Jmeter压力测试工具安装与使用
自动化测试·软件测试·测试工具·jmeter·职场和发展
PPPPPaPeR.24 分钟前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
看我干嘛!28 分钟前
python第五次作业
算法
历程里程碑34 分钟前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Sheep Shaun36 分钟前
如何让一个进程诞生、工作、终止并等待回收?——探索Linux进程控制与Shell的诞生
linux·服务器·数据结构·c++·算法·shell·进程控制
Pluchon37 分钟前
硅基计划4.0 简单模拟实现AVL树&红黑树
java·数据结构·算法
June bug41 分钟前
【PMP】敏捷Scrum实践
经验分享·职场和发展·学习方法·scrum
生锈的键盘1 小时前
推荐算法实践:交叉特征的理解
算法
乌萨奇也要立志学C++1 小时前
【洛谷】BFS 求解最短路:从马的遍历到迷宫问题的实战解析
算法·宽度优先
老鼠只爱大米1 小时前
LeetCode经典算法面试题 #46:全排列(回溯、交换、剪枝等五种实现方案详细解析)
算法·leetcode·剪枝·回溯·全排列·stj算法