链式A+B 牛客网 程序员面试金典 C++ Python
链式A+B 牛客网 程序员面试金典 C++ Python
- 题目描述
- 有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
- 给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。
- 测试样例:
- {1,2,3},{3,2,1}
- 返回:{4,4,4}
C++
/*
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };*/
class Plus {
public:
// run: 3ms memory:456k
ListNode* plusAB(ListNode* a, ListNode* b) {
ListNode* ret = new ListNode(0);
ListNode* p = ret;
int j=0;
while(NULL!=a || NULL!=b || j!=0){
ListNode* s = new ListNode(0);
s->val += j;
if (NULL!=a) s->val += a->val;
if (NULL!=a) a = a->next;
if (NULL!=b) s->val += b->val;
if (NULL!=b) b = b->next;
if (s->val >= 10) j=1; else j = 0;
if (s->val >=10) s->val -= 10;
p = p->next = s;
}
ListNode* r = ret->next;
free(ret);
return r;
}
// run:2ms memory:476k
ListNode* plusAB2(ListNode* a, ListNode* b) {
ListNode* ret = new ListNode(0);
ListNode* p = ret;
int j=0;
while(NULL!=a || NULL!=b || j!=0){
ListNode* s = new ListNode(0);
s->val += j;
if (NULL!=a) {
s->val += a->val;
a = a->next;
}
if (NULL!=b) {
s->val += b->val;
b = b->next;
}
if (s->val >= 10) {
j=1;
s->val -= 10;
}else{
j=0;
}
p->next = s;
p = p->next;
}
ListNode* r = ret->next;
free(ret);
return r;
}
// run:4 memory:608k
ListNode* plusAB3(ListNode* a, ListNode* b) {
ListNode* ret = new ListNode(0);
ListNode* p = ret;
int j=0;
while(NULL!=a && NULL!=b){
ListNode* s = new ListNode(0);
s->val = a->val + b->val + j;
if (s->val >= 10){
j = 1;
s->val -= 10;
}else
j = 0;
p->next = s;
p = p->next;
a = a->next;
b = b->next;
}
while(NULL!=a){
ListNode* s = new ListNode(0);
s->val = a->val + j;
if (s->val >= 10){
j = 1;
s->val -= 10;
}else
j = 0;
p->next = s;
p = p->next;
a = a->next;
}
while(NULL!=b){
ListNode* s = new ListNode(0);
s->val = b->val + j;
if (s->val >= 10){
j = 1;
s->val -= 10;
}else
j = 0;
p->next = s;
p = p->next;
b = b->next;
}
if (1 == j){
ListNode* s = new ListNode(1);
p->next = s;
}
ListNode* r = ret->next;
free(ret);
return r;
}
};
Python
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Plus:
#run: 27ms memory: 5728k
def plusAB(slef,a,b):
ret = ListNode(0)
p = ret
j = 0
while(a or b or j!=0):
s = ListNode(0)
s.val += j
if(a): s.val += a.val
if(a): a = a.next
if(b): s.val += b.val
if(b): b = b.next
if s.val >= 10: j = 1
else: j = 0
if s.val >= 10: s.val -= 10
p.next = s
p = p.next
return ret.next
#run: 37ms memory:5628k
def plusAB2(slef,a,b):
ret = ListNode(0)
p = ret
j = 0
while(a or b or j!=0):
s = ListNode(0)
s.val += j
if(a):
s.val += a.val
a = a.next
if(b):
s.val += b.val
b = b.next
if s.val >= 10:
j = 1
s.val -= 10
else:
j = 0
p.next = s
p = p.next
return ret.next
#run: 22ms memory:5856k
def plusAB3(self, a, b):
if None == a: return b
if None == b: return a
r = ListNode(0)
p = r
j = 0
while(a and b):
s = ListNode(0)
s.val = a.val + b.val + j
if s.val >= 10:
j = 1
s.val -= 10
else:
j = 0
p.next = s
p = p.next
a = a.next
b = b.next
while(a):
s = ListNode(0)
s.val = a.val + j
if s.val >= 10:
j = 1
s.val -= 10
else:
j = 0
p.next = s
p = p.next
a = a.next
while(b):
s = ListNode(0)
s.val = b.val + j
if s.val >= 10:
j = 1
s.val -= 10
else:
j = 0
p.next = s
p = p.next
b = b.next
if j == 1:
s = ListNode(1)
p.next = s
return r.next
链式A+B 牛客网 程序员面试金典 C++ Python的更多相关文章
- 平分的直线 牛客网 程序员面试金典 C++ Python
平分的直线 牛客网 程序员面试金典 C++ Python 题目描述 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分.假定正方形的上下两条边与x轴平行. 给定两个vecotrA和B ...
- 奇偶位交换 牛客网 程序员面试金典 C++ Python
奇偶位交换 牛客网 程序员面试金典 C++ Python 题目描述 请编写程序交换一个数的二进制的奇数位和偶数位.(使用越少的指令越好) 给定一个int x,请返回交换后的数int. 测试样例: 10 ...
- 字符串压缩 牛客网 程序员面试金典 C++ Python
字符串压缩 牛客网 程序员面试金典 C++ Python 题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串"aabcccccaaa"经压缩会变 ...
- 回文链表 牛客网 程序员面试金典 C++ Python
回文链表 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例 ...
- 双栈排序 牛客网 程序员面试金典 C++ Python
双栈排序 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中. ...
- 原串反转 牛客网 程序员面试金典 C++ Python
原串反转 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). 给定一个string iniS ...
- 高度最小的BST 牛客网 程序员面试金典 C++ Python
高度最小的BST 牛客网 程序员面试金典 C++ Python 题目描述 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] val ...
- 集合栈 牛客网 程序员面试金典 C++ Python
集合栈 牛客网 程序员面试金典 C++ Python 题目描述 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通 ...
- 链表分割 牛客网 程序员面试金典 C++ Python
链表分割 牛客网 程序员面试金典 C++ Python 题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* p ...
随机推荐
- 优雅地创建未定义类PHP对象
在PHP中,如果没有事先准备好类,需要创建一个未定义类的对象,我们可以采用下面三种方式: new stdClass() new class{} (object)[] 首先是stdClass,这个类是一 ...
- 对象赋值在PHP中到底是不是引用?
之前的文章中,我们说过变量赋值的问题,其中有一个问题是对象在进行变量赋值的时候,直接就是引用赋值.那么到底真实情况是怎样呢? 之前变量赋值的文章 PHP的变量赋值 对象引用测试 在继续深入的学习PHP ...
- TP框架 商城前台用户注册方法
//注册 public function register(){ if(IS_POST){ //接收数据 $data = I('post.'); $model = D('User'); $data[' ...
- web自动化:IE11运行Python+selenium程序
from selenium import webdriver # 运行此脚本前必须按要求修改注册表'''[HKEY_CURRENT_USER\Software\Microsoft\Internet E ...
- 『GoLang』反射
方法和类型的反射 反射是应用程序检查其所拥有的结构,尤其是类型的一种能.每种语言的反射模型都不同,并且有些语言根本不支持反射.Go语言实现了反射,反射机制就是在运行时动态调用对象的方法和属性,即可从运 ...
- P6222-「P6156 简单题」加强版【莫比乌斯反演】
正题 题目链接:https://www.luogu.com.cn/problem/P6222 题目大意 给出\(k\),\(T\)组询问给出\(n\)求 \[\sum_{i=1}^n\sum_{j=1 ...
- 模拟一个简单的tomcat
目录 简单处理 每个请求一个线程 模拟tomcat 参考 简单处理 // 客户端和服务器的通信,说到底就是两个数据的传输, // 客户端发送inputStream给服务器,服务器回复 // outpu ...
- 憋了很久,终于弄懂什么是IOC(控制反转)
导航 共享充电宝 IOC思想 复杂的依赖关系 IOC定义 Spring中的IOC IOC与工厂模式 IOC容器的技术剖析 结语 参考 本节是摘自<Spring Boot 实战纪实>的第 ...
- 题解 Sue的小球/名次排序问题/方块消除/奥运物流
Sue的小球 名次排序问题 方块消除 奥运物流 Sue的小球 题目大意 有 \(n\) 个小球在下落,初始位置 \((x_i,y_i)\),下落速度为 \(v_i\).你初始位置在 \(x_0\),速 ...
- 洛谷3244 落忆枫音 (拓扑图dp+式子)
题目大意就是 给你一个DAG 然后添加一条边\(x->y\) ,询问以1为根的生成树的个数 QWQ 首先假设没有添加的边 答案就应该是 \[ans=\prod_{i=1}^{n} in[i] \ ...