两个单链表生成相加链表
题目:
假设链表中每一个节点的值都在0~9之间,那么链表整体就可以代表一个整数。
例如:9 -> 3 -> 7,可以代表整数937。
给定两个这种链表的头节点head1和head2,请生成代表两个整数相加值的结果链表。
例如:链表1为9 -> 3 -> 7,链表2为6 -> 3,最后生成新的结果链表为1 -> 0 -> 0 -> 0。
基本思路:
容易想到的方法是先将两个链表的值表示出来,然后将两个值累加起来,再根据累加结果生成一个新链表。这种方法实际是不可行的,因为链表的长度可以很长,表示的数字可以很大,容易出现int类型溢出。
方法一。利用两个栈,分别将链表1、2的值压入栈中,这样就生成了两个链表的逆序栈。将两个栈同时弹出,这样就相当于两个链表从低位到高位依次弹出,在这个过程中生成相加链表即可。注意相加过程中的进位问题。
class Node:def __init__(self,value):self.value = valueself.next = Nonedef addList(head1,head2):if head1 == None or head2 == None:return s1 = []s2 = []while head1!=None:s1.append(head1.value)head1 = head1.nextwhile head2!=None:s2.append(head2.value)head2 = head2.nextn1,n2,n,ca = 0,0,0,0pre,node = None,Nonewhile len(s1)!=0 or len(s2)!=0:if len(s1)==0:n1 = 0else:n1 = s1.pop()if len(s2)==0:n2 = 0else:n2 = s2.pop()n = n1 + n2 + capre = nodenode = Node(n%10)node.next = preca = n//10if ca == 1:pre = nodenode = Node(1)node.next = prereturn node
"""方法二、将链表逆序求解,可以节省栈空间"""def addList2(head1,head2):if head1 == None or head2 == None:returnhead1 = reverseList(head1)head2 = reverseList(head2)ca,n1,n2,n = 0,0,0,0c1,c2,node,pre = head1,head2,None,Nonewhile c1!=None or c2!=None:if c1!=None:n1 = c1.valueelse:n1 = 0if c2!=None:n2 = v2.valueelse:n2 = 0n = n1 + n2 + capre = nodenode = Node(n%10)node.next = preca = n//10if c1!=None:c1 = c1.nextelse:c1 = Noneif c2!=None:c2 = c2.nextelse:c2 = Noneif ca == 1:pre = nodenode = Node(1)node.next = prereverseList(head1)reverseList(head2)return nodedef reverseList(head):pre,next_ = None,Nonewhile head!=None:next_ = head.nexthead.next = prepre = headhead = next_return pre
两个单链表生成相加链表相关推荐
- 两个链表生成相加链表
两个链表生成相加链表 题目 思路 先将两个链表分别反转 从头部开始相加(注意进位及一个链表遍历完的情况) 再将相加后的链表反转 class ListNode:def __init__(self, x) ...
- 牛客题霸 [两个链表生成相加链表] C++题解/答案
牛客题霸 [两个链表生成相加链表] C++题解/答案 题目描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数. 给定两个这种链表,请生成代表两个整数相加值的结果链表. ...
- 链表问题10——两个单链表生成相加链表(方法二)
题目 假设链表中每一个节点的值都在0-9之间,链表整体代表一个整数. 给定两个这种链表的头节点,请生成代表两个整数相加值的结果链表. 链表1 链表2 生成的新链表 9->3->7 6-&g ...
- 链表问题10——两个单链表生成相加链表
题目 假设链表中每一个节点的值都在0-9之间,链表整体代表一个整数. 给定两个这种链表的头节点,请生成代表两个整数相加值的结果链表. 链表1 链表2 生成的新链表 9->3->7 6-&g ...
- 常考数据结构与算法:两个链表生成相加链表
题目描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数. 给定两个这种链表,请生成代表两个整数相加值的结果链表. 例如:链表 1 为 9->3->7,链表 ...
- 7_2判断两个单链表是否相交,若相交,求出第一个交点
转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4251372.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己 ...
- 推断两条单链表是否相交
算法中常常会推断两条单链表是否相交,尽管算法简单,但也值得说一下. 代码中有详尽凝视. Show you the code ! #undef UNICODE#include <iostream& ...
- 单链表——判断两个单链表(无头节点)是否相交,如果相交,返回单链表的第一个结点
本博客主要记录两个解法: 1.求两个单链表的节点个数,消除结点个数不同带来的影响,两个指针一起走,相遇即相交点. 2.数学方式求解. 一.求结点个数,消除结点个数不同带来的影响,俩指针同步走 思路:两 ...
- c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...
如何判断两个单链表(无环)是否交叉 单链表相交指的是两个链表存在完全重合的部分,如下图所示 在上图中,这两个链表相交于结点5,要求判断两个链表是否相交,如果相交,找出相交处的结点. 分析 Hash法 ...
最新文章
- 最新技术选型解决方案列表
- visual studio 多行编辑 列编辑
- python爬虫教程视频-python爬虫(入门教程、视频教程)
- 画布上涂鸦功能(可橡皮擦、可清除)
- CES上那些卖萌耍酷的家用机器人究竟怎么样?还是不太懂人话
- Java开发环境搭建及开发软件和服务器安装与配置
- 计算机组成原理课后习题答案(第五版白中英)
- zend studio12配置php,Zend Studio 12.0调试php代码
- 调试蓝牙串口模块HC-05
- 2011款iMac的AirDrop使用方法。
- windows 定时任务:schtasks,定时关闭网易云音乐
- linux 深度 crossover,在Deepin V20(UOS)下使用crossover安装Kt交易师的方法
- 树莓派开发和车牌识别
- 我的气垫船充满了鳗鱼
- 谭浩强c语言第八章指针ppt,谭浩强c语言第八章_指针.ppt
- 人民币升值与升值预期收益股票
- 【Layui】使用table和laypage组件实现动态显示列和分页
- 我们应该为了爱,还是为了钱而找工作?
- 兰大网络教育c语言答案,兰大《C语言程序设计》9月在线考核试题答案
- 真是没的说,我也深深感觉这样,现在什么也干不下去,总是心静不下来.想学习,看点书,总是被工作打断.闲下来总想多休息一下,放松一下
热门文章
- R语言扩展包dplyr——数据清洗和整理
- ThinkPHP的易忽视点小结
- 服务器负载均衡的部署方式
- KB929828:在Vista中使用Sysprep /generalize时出错
- 算法提高课-图论-单源最短路的综合应用-AcWing 1135. 新年好:dijkstra和dfs暴搜结合
- PAT甲级1083 List Grades:[C++题解]结构体、排序
- Leetcode1704判断字符串的两半是否相似(C++题解)
- html页面如何循环遍历,遍历foreach循环中的HTML DOM元素
- curd boy 入门
- python高通滤波器设计_python实现直方图均衡化,理想高通滤波与高斯低通滤波