leetcode2. 两数相加
使用迭代的方式
class Solution{
public:
ListNode *addTwoNumbers(ListNode* l1,ListNode *l2)
{
ListNode *res=new ListNode(-);
ListNode *p=res;
int temp=,increase=;
while(l1 && l2)
{
temp=l1->val+l2->val+increase;
ListNode *r = new ListNode(-);
if(temp>=)
increase=;
else
increase=;
r->val=temp%;
res->next=r;
res=res->next;
l1=l1->next;
l2=l2->next;
}
while(l1)
{
ListNode *r = new ListNode(-);
temp=l1->val+increase;
if(temp>=)
increase=;
else
increase=;
r->val=temp%;
res->next=r;
res=res->next;
l1=l1->next;
}
while(l2)
{
ListNode *r = new ListNode(-);
temp=l2->val+increase;
if(temp>=)
increase=;
else
increase=;
r->val=temp%;
res->next=r;
res=res->next;
l2=l2->next;
}
if(increase==)
{
ListNode *r = new ListNode();
res->next=r;
}
return p->next;
}
};
其实还有更简洁的书写方式,我上面是用了三个while,其实一个while就够了,如下,更加优雅,摘自Leetcode,侵删
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode DummyHead = new ListNode(); // 初始化一个伪头结点
ListNode pre = DummyHead; // 用 pre 记录要创建并赋值的节点的前一个节点
int Carry = ; // 初始化进位
while( l1 != null || l2 != null || Carry > ) // 继续相加的条件是 链表对应位置中存在不为空的节点 或 有进位
{
int sum = ((l1 != null) ? l1.val : ) + ((l2 != null) ? l2.val : ) + Carry; //计算对应位的和(需要加上进位)
Carry = sum / ; // 记录下次相加的进位
pre.next = new ListNode(sum % ); // 创建并赋值下个节点
pre = pre.next; // pre 移动到新创建的节点位置上,便于下一轮继续创建新节点 /* 当节点不为空的时候,指向它的下一个节点(之前判断的是其后节点是否为空,导致超时,因为与while的条件不匹配) */
if(l1 != null)
l1 = l1.next;
if(l2 != null)
l2 = l2.next;
}
return DummyHead.next; // 返回有数据的第一个节点,也就是伪节点的下一个节点
}
}
leetcode2. 两数相加的更多相关文章
- [Swift]LeetCode2. 两数相加 | Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...
- LeetCode2.两数相加 JavaScript
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- Leetcode2 两数相加 Python
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- Leetcode2.两数相加——简洁易懂
> 简洁易懂讲清原理,讲不清你来打我~ 输入两个链表,相同位置相加,进位给下一个位置,输出相加后的链表
2. 两数相加 2. Add Two Numbers 题目描述 You are given two non-empty linked lists representing two non-negati ...
- [CareerCup] 18.1 Add Two Numbers 两数相加
18.1 Write a function that adds two numbers. You should not use + or any arithmetic operators. 这道题让我 ...
- ✡ leetcode 167. Two Sum II - Input array is sorted 求两数相加等于一个数的位置 --------- java
Given an array of integers that is already sorted in ascending order, find two numbers such that the ...
- [Swift]LeetCode445. 两数相加 II | Add Two Numbers II
You are given two non-empty linked lists representing two non-negative integers. The most significan ...
随机推荐
- 阿里云cdn缓存设置技巧,不同文件结尾用不同的缓存时间
https://edu.aliyun.com/lesson_130_1505?spm=5176.10731542.0.0.2ed37dbf42YL6U#_1505
- guava(三)字符串处理 Joiner Splitter CharMatcher
一.Joiner 拼接字符串 1.join 拼接集合中的元素 System.out.println(Joiner.on(";").join(Ints.asList(1,2,3))) ...
- Azure EA (1) 查看国内Azure账单
<Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China 有关Azure EA Portal的详细内容,可以参考我的GitHu ...
- (二十二)golang--时间和日期相关函数
时间的常量,可以获得指定时间单位 Unix和UnixNano 小例子:统计函数运行的时间:
- Delphi - OLE类实现TTS方式语音朗读
Delphi调用OLE类实现TTS方式语音朗读 直接看代码: unit uMain; interface uses Windows, Messages, SysUtils, Variants, Cla ...
- //某父元素(.class)底下相同class的第二的取值
//某父元素(.class)底下相同class的第二的取值 var v = $('.cell-right').find(".startime").eq(1).val();
- maven 学习---使用Maven运行单元测试
要通过Maven运行单元测试,发出此命令: mvn test 这会在你的项目中运行整个单元测试. 案例学习 创建两个单元测试,并通过 Maven 的运行它.参见一个简单的 Java 测试类: pack ...
- 【推荐】全球最全面的Telegram组群频道的集合网站 持续收集中
全球最全面的Telegram组群频道的集合网站 https://www.telegramgroup.org Telegram 组群频道分享 可搜索自己想找的组群频道 从小白到大神,一个 telegra ...
- K3 主控台创建
/*================================================== FFFFFF OOOO GGGG EEEEEE RRRR SSSS ###### FF OO ...
- HDFS常用API操作 和 HDFS的I/O流操作
前置操作 创建maven工程,修改pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...