当前位置: 首页 > news >正文

昆明网站建设设计宣传片拍摄协议

昆明网站建设设计,宣传片拍摄协议,html页面网站建设中,win7 iis搭建网站教程先放题目: 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c…

先放题目:

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.


示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
 

提示:

每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零


下面是解析

我自己其实和官方给出的理解差不多,就是做一个求和,如果两个链表的长度不一致,就认为较短的链表高位均为0

基本思路就是创建一个链表,每一位保存进位标志和数1数2那一位分别对应的数值的和,然后更新进位标志,代码就借用官方给的了:

struct ListNode *addTwoNumbers(struct ListNode *l1, struct ListNode *l2) {struct ListNode *head = NULL, *tail = NULL;int carry = 0;while (l1 || l2) {int n1 = l1 ? l1->val : 0;int n2 = l2 ? l2->val : 0;int sum = n1 + n2 + carry;if (!head) {head = tail = malloc(sizeof(struct ListNode));tail->val = sum % 10;tail->next = NULL;} else {tail->next = malloc(sizeof(struct ListNode));tail->next->val = sum % 10;tail = tail->next;tail->next = NULL;}carry = sum / 10;if (l1) {l1 = l1->next;}if (l2) {l2 = l2->next;}}if (carry > 0) {tail->next = malloc(sizeof(struct ListNode));tail->next->val = carry;tail->next->next = NULL;}return head;
}

接下来细细解释:

首先是链表的运用

链表在初始化一个节点的时候,用的语句是

struct ListNode *head = NULL, *tail = NULL;
head = tail = malloc(sizeof(struct ListNode));

一般来说,每一次新建一个节点,都要顺手设置为NULL,保持良好的编程习惯

但是只是声明变量时是没有分配存储空间的,要用malloc分配对应的存储空间

之后,我们需要建立进位标识,因为加法会出现进位,进位标识的值应当是和除以10的余数

int carry = 0;
carry = sum / 10;

和来自于这一位对应求和加上进位:

int sum = n1 + n2 + carry;

重中之重是链表的使用,每一节点的next参数,储存下一节点的位置,也就是通过next访问下一节点

在和链表为空时,我们需要首先给链表分配一个空间,并完成链表的初始赋值,设置下一节点为NULL:

head = tail = malloc(sizeof(struct ListNode));
tail->val = sum % 10;
tail->next = NULL;

等到链表中有了一个节点,接下来分配存储空间的时候,就可以直接指定next为新节点的坐标:

tail->next = malloc(sizeof(struct ListNode));

然后对新节点进行赋值,必须始终记得设置next为NULL;

tail->next->val = sum % 10;
tail = tail->next;
tail->next = NULL;

最后判断两个链表到了什么位置,是否到了链表结尾:

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

在这个逻辑里面,如果第一个链表到了结尾,就将另一个链表向后移动,

这样,结合循环开头的代码:

int n1 = l1 ? l1->val : 0;
int n2 = l2 ? l2->val : 0;

会将已经到结尾的链表对应的n设置为0,另一个正常读取

最后看是否有进位:

if (carry > 0) {tail->next = malloc(sizeof(struct ListNode));tail->next->val = carry;tail->next->next = NULL;
}

程序结束。

http://www.yayakq.cn/news/148820/

相关文章:

  • 流量最大的网站seo网站查询
  • 使用mvs2010做网站网络营销策划方案的结构
  • 做网站都要用到框架吗电商小程序报价
  • 云南省建设厅网站首页做详情页到那个网站找模特素材
  • 让蜘蛛不抓取网站的文件夹黄陂网站建设
  • 开发直播平台网站wordpress更改了数据库密码错误
  • 搭配网站开发的开题报告建各企业网站多少钱
  • 大学生建设什么网站好网站建设服务器可以租吗
  • 网站建设开发报价单昆明企业网站设计公司
  • 网站开发需要做什么免费引流推广的方法
  • 网站建设维护成WordPress幻灯片首页
  • 适合奖励自己的网站免费专业的广州微网站建设
  • 佛山网站设计制作免费咨询dw网页制作怎么改字体大小
  • 怎样做网站流量深圳做消防工程的公司
  • 如何推广自己网站的关键词简单的网站首页
  • 管理网站英文wordpress扁平化博客主题
  • 怎么创建网站赚钱巴中网站制作公司
  • 网站设计摘要 优帮云广州视频制作
  • 网站建设 后台空间容量简历模板个人简历电子版免费可编辑
  • 山东营销网站建设联系方式工具类网站设计
  • 网站在排版有哪些方法wordpress 证书
  • 服务器搭建网站步骤视频自己建网站做那个模块好
  • 杭州亚太建设监理咨询有限公司中标网站企业品牌推广口号
  • 网站建设报价多少潍坊网站建设熊掌号
  • 网站开发工程师6建设服装网站目的
  • 深圳做网站多少费用做儿童成长相册模版网站
  • 惠州惠城网站建设软件工程培训机构哪家好
  • 寄生虫网站代做wordpress wrapper
  • 做拍卖网站多少钱潍坊网站建设 58
  • 使用angular2框架做的网站vs2010 iis 网站开发