1.3如何计算两个单链表代表的数之和
时间:2019-09-04
本文章向大家介绍1.3如何计算两个单链表代表的数之和,主要包括1.3如何计算两个单链表代表的数之和使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题描述
给定两个单链表,链表的每个结点代表一位数,计算两个数的和。例如 :输入链表 (3一>1一> 5)和链表(5一>9一> 2),输出 :8->0->8,即 513+295 =808,注意个位数在链表头。
class Node:
def __init__(self, data=None, next=None):
self.data = data
self.next = next
# 输出链表
def print_link(head):
cur = head.next
while cur.next != None:
print(cur.data, end=' ')
cur = cur.next
print(cur.data)
# 输出计算结果,将结果链表逆置,从第一的不为0的节点开始输出
def print_str(head):
cur = head.next
f = 1
while cur.next != None:
if f and cur.data != 0:
print(cur.data, end='')
f = 0
elif f == 0:
print(cur.data, end='')
cur = cur.next
print(cur.data)
# 构造初始链表
def con_link(nums):
head = Node()
cur = head
for num in nums:
node = Node(num)
cur.next = node
cur = node
return head
# 按位计算,个位->十位->百位以此类推(大整数加法)
def min_compute(p1, p2, p3):
f = 0
while p1:
res = p1.data + p2.data + f
if res < 10:
p3.data = res
f = 0
else:
p3.data = res % 10
f = 1
p1 = p1.next
p2 = p2.next
p3 = p3.next
while p2:
res = p2.data + f
if res < 10:
p3.data = res
f = 0
else:
p3.data = res % 10
f = 1
p2 = p2.next
p3 = p3.next
if f == 1:
p3.data = f
# 逆转链表
def reverse_link(head):
if head.next == None or head == None:
return
pre = head.next
cur = head.next.next
pre.next = None
while cur.next != None:
next = cur.next
cur.next = pre
pre = cur
cur = next
cur.next = pre
head.next = cur
print_str(head)
def compute(head1, head2, length1, length2):
p1 = head1.next
p2 = head2.next
# 构造结果链表,考虑到进位的情况结果链表长度应该比加数位数多一位
nums = [0 for i in range(max(length1, length2) + 1)]
head3 = con_link(nums)
p3 = head3.next
# 两个加数长度不同时应该分别考虑
if length2 >= length1:
min_compute(p1, p2, p3)
else:
min_compute(p2, p1, p3)
reverse_link(head3)
if __name__ == '__main__':
s1 = input("link1>>:")
nums1 = list(map(int, s1.split(' ')))
length1 = len(nums1)
s2 = input("link2>>:")
nums2 = list(map(int, s2.split(' ')))
length2 = len(nums2)
link1 = con_link(nums1)
link2 = con_link(nums2)
print_link(link1)
print_link(link2)
compute(link1, link2, length1, length2)
原文地址:https://www.cnblogs.com/miao-study/p/11458436.html
- 使用ASP.NET实现Model View Presenter(MVP)
- android性能优化1
- 百度地图之收索视野内的建筑物
- Line Counter - Writing a Visual Studio 2005 Add-In
- 百度地图之标注聚会
- How to Add an API to your Web Service
- 「微信小程序」剖析(四):原生的实时DOM转Virtual DOM
- 让你的「微信小程序」运行在Chrome浏览器上,让我们使用WebStorm
- android上拉下拉加载更多数据
- 「微信小程序」剖析(二):框架原理 | 在桌面浏览器上运行的尝试
- Working with Windows Workflow Foundation in ASP.NET
- 微信小程序剖析【下】:运行机制
- android多屏幕分辨率适配
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 想要成为前端Star 吗?一首歌时间将React / Vue 应用Docker 化
- 初识Pandas
- 【教程】从零制作文件系统到jz2440,使其支持telnet , ftp 和tftp
- Mybatis源码学习第六天(核心流程分析)之Executor分析
- EasyPoi导出Excel
- 盘点 15 个好用的 API 接口管理神器
- JVM学习第二天(垃圾回收器和内存分配策略)大章
- JVM学习第一天(虚拟机的前世今生与与Java的内存区域)
- Android进阶:Binder那么弱怎么面大厂?
- Mybatis源码学习第七天(PageHelper分析)
- 【小程序】728- 小程序如何生成海报分享朋友圈
- Mybatis源码学习第七天(插件源码分析)
- Mybatis源码学习第七天(插件开发原理)
- Mybatis源码学习第六天(核心流程分析)之Executor分析(补充)
- 无法用排他锁锁定该数据库,以执行该操作。 (Microsoft SQL Server,错误: 5030)