链式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的更多相关文章

  1. 平分的直线 牛客网 程序员面试金典 C++ Python

    平分的直线 牛客网 程序员面试金典 C++ Python 题目描述 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分.假定正方形的上下两条边与x轴平行. 给定两个vecotrA和B ...

  2. 奇偶位交换 牛客网 程序员面试金典 C++ Python

    奇偶位交换 牛客网 程序员面试金典 C++ Python 题目描述 请编写程序交换一个数的二进制的奇数位和偶数位.(使用越少的指令越好) 给定一个int x,请返回交换后的数int. 测试样例: 10 ...

  3. 字符串压缩 牛客网 程序员面试金典 C++ Python

    字符串压缩 牛客网 程序员面试金典 C++ Python 题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串"aabcccccaaa"经压缩会变 ...

  4. 回文链表 牛客网 程序员面试金典 C++ Python

    回文链表 牛客网 程序员面试金典  C++ Python 题目描述 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例 ...

  5. 双栈排序 牛客网 程序员面试金典 C++ Python

    双栈排序 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中. ...

  6. 原串反转 牛客网 程序员面试金典 C++ Python

    原串反转 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). 给定一个string iniS ...

  7. 高度最小的BST 牛客网 程序员面试金典 C++ Python

    高度最小的BST 牛客网 程序员面试金典 C++ Python 题目描述 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] val ...

  8. 集合栈 牛客网 程序员面试金典 C++ Python

    集合栈 牛客网 程序员面试金典 C++ Python 题目描述 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通 ...

  9. 链表分割 牛客网 程序员面试金典 C++ Python

    链表分割 牛客网 程序员面试金典 C++ Python 题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* p ...

随机推荐

  1. 安卓学习记录(四)——体温表APP

    1.新建project file->new->new project,选择Basic Activity 2.在content_main.xml中添加一个List View 1 <Li ...

  2. PHP执行数据库定时备份 和手动还原

    一 备份数据库 我的这个是在TP5上,其实不在TP5也可以 逻辑: 1 首先在自己电脑的cmd命令上测试备份数据库,成功才能往下进行所以得到 C:/luanxiede/mysql-5.7/bin/my ...

  3. layui 各项配置

    第一.如何全部选中table中每一条记录 1.首先给table的父类设置一个唯一id *这种方式不推荐,效果比较差,推荐第2种方式 再搜索 alias-table div.layui-table-fi ...

  4. 『Python』进程同步

    1. Lock(互斥锁) 是可用的最低级的同步指令.Lock处于锁定状态时,不被其他的线程拥有. from multiprocessing import Process, Value, Lock de ...

  5. [C语言]学习之路

    实例:C语言编程题 求100到300之间所有素数 #include <stdio.h> int main(void) { int i,j; for(i = 100;i <= 300; ...

  6. Git:分布式版本控制系统

    参考廖雪峰的 Git 教程:https://www.liaoxuefeng.com/wiki/896043488029600  讲解很详细,这里只做一些个人笔记: 各系统安装 Git :https:/ ...

  7. NWERC2020J-Joint Excavation【构造,贪心】

    正题 题目链接:https://codeforces.com/gym/103049/problem/J 题目大意 \(n\)个点\(m\)条边的一张无向图,选出一条路径后去掉路径上的点,然后将剩下的点 ...

  8. P6091-[模板]原根

    正题 题目链接:https://www.luogu.com.cn/problem/P6091 题目大意 给出一个数\(p\),求出它的所有在\([0,p]\)的原根. 解题思路 原根的定义,\(\de ...

  9. P5934-[清华集训2012]最小生成树【最小割】

    正题 题目链接:https://www.luogu.com.cn/problem/P5934 题目大意 给出\(n\)个点\(m\)条边的一张图,再加入一条边\((u,v,L)\)求至少删掉多少条边可 ...

  10. CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】

    正题 题目链接:https://www.luogu.com.cn/problem/CF585E 题目大意 给出一个大小为\(n\)的可重集\(T\),求有多少个它的非空子集\(S\)和元素\(x\)满 ...