题目:

假设链表中每一个节点的值都在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

两个单链表生成相加链表相关推荐

  1. 两个链表生成相加链表

    两个链表生成相加链表 题目 思路 先将两个链表分别反转 从头部开始相加(注意进位及一个链表遍历完的情况) 再将相加后的链表反转 class ListNode:def __init__(self, x) ...

  2. 牛客题霸 [两个链表生成相加链表] C++题解/答案

    牛客题霸 [两个链表生成相加链表] C++题解/答案 题目描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数. 给定两个这种链表,请生成代表两个整数相加值的结果链表. ...

  3. 链表问题10——两个单链表生成相加链表(方法二)

    题目 假设链表中每一个节点的值都在0-9之间,链表整体代表一个整数. 给定两个这种链表的头节点,请生成代表两个整数相加值的结果链表. 链表1 链表2 生成的新链表 9->3->7 6-&g ...

  4. 链表问题10——两个单链表生成相加链表

    题目 假设链表中每一个节点的值都在0-9之间,链表整体代表一个整数. 给定两个这种链表的头节点,请生成代表两个整数相加值的结果链表. 链表1 链表2 生成的新链表 9->3->7 6-&g ...

  5. 常考数据结构与算法:两个链表生成相加链表

    题目描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数. 给定两个这种链表,请生成代表两个整数相加值的结果链表. 例如:链表 1 为 9->3->7,链表 ...

  6. 7_2判断两个单链表是否相交,若相交,求出第一个交点

    转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4251372.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己 ...

  7. 推断两条单链表是否相交

    算法中常常会推断两条单链表是否相交,尽管算法简单,但也值得说一下. 代码中有详尽凝视. Show you the code ! #undef UNICODE#include <iostream& ...

  8. 单链表——判断两个单链表(无头节点)是否相交,如果相交,返回单链表的第一个结点

    本博客主要记录两个解法: 1.求两个单链表的节点个数,消除结点个数不同带来的影响,两个指针一起走,相遇即相交点. 2.数学方式求解. 一.求结点个数,消除结点个数不同带来的影响,俩指针同步走 思路:两 ...

  9. c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...

    如何判断两个单链表(无环)是否交叉 单链表相交指的是两个链表存在完全重合的部分,如下图所示 在上图中,这两个链表相交于结点5,要求判断两个链表是否相交,如果相交,找出相交处的结点. 分析 Hash法 ...

最新文章

  1. 最新技术选型解决方案列表
  2. visual studio 多行编辑 列编辑
  3. python爬虫教程视频-python爬虫(入门教程、视频教程)
  4. 画布上涂鸦功能(可橡皮擦、可清除)
  5. CES上那些卖萌耍酷的家用机器人究竟怎么样?还是不太懂人话
  6. Java开发环境搭建及开发软件和服务器安装与配置
  7. 计算机组成原理课后习题答案(第五版白中英)
  8. zend studio12配置php,Zend Studio 12.0调试php代码
  9. 调试蓝牙串口模块HC-05
  10. 2011款iMac的AirDrop使用方法。
  11. windows 定时任务:schtasks,定时关闭网易云音乐
  12. linux 深度 crossover,在Deepin V20(UOS)下使用crossover安装Kt交易师的方法
  13. 树莓派开发和车牌识别
  14. 我的气垫船充满了鳗鱼
  15. 谭浩强c语言第八章指针ppt,谭浩强c语言第八章_指针.ppt
  16. 人民币升值与升值预期收益股票
  17. 【Layui】使用table和laypage组件实现动态显示列和分页
  18. 我们应该为了爱,还是为了钱而找工作?
  19. 兰大网络教育c语言答案,兰大《C语言程序设计》9月在线考核试题答案
  20. 真是没的说,我也深深感觉这样,现在什么也干不下去,总是心静不下来.想学习,看点书,总是被工作打断.闲下来总想多休息一下,放松一下

热门文章

  1. R语言扩展包dplyr——数据清洗和整理
  2. ThinkPHP的易忽视点小结
  3. 服务器负载均衡的部署方式
  4. KB929828:在Vista中使用Sysprep /generalize时出错
  5. 算法提高课-图论-单源最短路的综合应用-AcWing 1135. 新年好:dijkstra和dfs暴搜结合
  6. PAT甲级1083 List Grades:[C++题解]结构体、排序
  7. Leetcode1704判断字符串的两半是否相似(C++题解)
  8. html页面如何循环遍历,遍历foreach循环中的HTML DOM元素
  9. curd boy 入门
  10. python高通滤波器设计_python实现直方图均衡化,理想高通滤波与高斯低通滤波