力扣第二题 大数相加 ,链表在python到底该怎么写?

但问题在于链表的表示 如何创建一个L3呢 如何用next将他们连接起来呢?
原来是采用 制作链表的形式
l3_pointer.next = ListNode(l1_pointer.val + l2_pointer.val + mark)
这里用L3指向第三个链表 更改指针的下一个节点。
声明变量和指针,以及进位mark。
l1_pointer = l1
l2_pointer = l2
l3 = ListNode(0)
l3_pointer = l3
mark = 0
对于相同长度的部分操作如下:
mark = 0
while l1_pointer != None and l2_pointer != None :
if l1_pointer.val + l2_pointer.val + mark >= 10:
l3_pointer.next = ListNode(l1_pointer.val + l2_pointer.val + mark - 10)
mark = 1
else :
l3_pointer.next = ListNode(l1_pointer.val + l2_pointer.val + mark)
mark = 0
l1_pointer = l1_pointer.next
l2_pointer = l2_pointer.next
l3_pointer = l3_pointer.next
不同长度如下:
while l1_pointer != None :
if l1_pointer.val+mark < 10:
l3_pointer.next = ListNode(l1_pointer.val+mark)
mark = 0
else:
l3_pointer.next = ListNode(l1_pointer.val+mark-10)
mark = 1
l1_pointer = l1_pointer.next
l3_pointer = l3_pointer.next
处理最后一位:
if mark == 1:
l3_pointer.next = ListNode(mark)
return l3.next
顺便写了一个把列表变为链表的程序方便测试:
def makeList(l1):
LNode = ListNode(0)
Lp = LNode
for i,each in enumerate(l1):
if i != len(l1)-1:
Lp.val = each
Lp.next = ListNode(0)
Lp = Lp.next
else:
Lp.val = each return LNode
全部代码:
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def makeList(l1):
LNode = ListNode(0)
Lp = LNode
for i,each in enumerate(l1):
if i != len(l1)-1:
Lp.val = each
Lp.next = ListNode(0)
Lp = Lp.next
else:
Lp.val = each return LNode def addTwoNumbers(l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
l1_pointer = l1
l2_pointer = l2
l3 = ListNode(0)
l3_pointer = l3 mark = 0
while l1_pointer != None and l2_pointer != None :
if l1_pointer.val + l2_pointer.val + mark >= 10:
l3_pointer.next = ListNode(l1_pointer.val + l2_pointer.val + mark - 10)
mark = 1
else :
l3_pointer.next = ListNode(l1_pointer.val + l2_pointer.val + mark)
mark = 0
l1_pointer = l1_pointer.next
l2_pointer = l2_pointer.next
l3_pointer = l3_pointer.next
if l1_pointer == None:
l1_pointer = l2_pointer while l1_pointer != None :
if l1_pointer.val+mark < 10:
l3_pointer.next = ListNode(l1_pointer.val+mark)
mark = 0
else:
l3_pointer.next = ListNode(l1_pointer.val+mark-10)
mark = 1
l1_pointer = l1_pointer.next
l3_pointer = l3_pointer.next
if mark == 1:
l3_pointer.next = ListNode(mark)
return l3.next l1 = makeList([9,9,9,9,9])
l2 = makeList([9,9,9])
l3 = addTwoNumbers(l1,l2)
l3_pointer = l3
while l3_pointer != None:
print(l3_pointer.val)
l3_pointer = l3_pointer.next
力扣第二题 大数相加 ,链表在python到底该怎么写?的更多相关文章
- 力扣—Reorder List(重排链表)python实现
题目描述: 中文: 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点 ...
- 力扣——Partition List(分隔链表) python实现
题目描述: 中文: 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = ...
- 力扣50题 Pow(x,n)
本题是力扣网第50题. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 采用递归和非递归思路python实现. class Solution: #递归思路 def myPow_recurs ...
- 【力扣】82. 删除排序链表中的重复元素 II
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字. 返回同样按升序排列的结果链表. 示例 1: 输入:hea ...
- 力扣算法题—069x的平方根
实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...
- 力扣 ——4Sum (四数之和)python 实现
题目描述: 中文: 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 targe ...
- 力扣—gray code (格雷编码) python实现
题目描述: 中文: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 英文: Th ...
- 力扣—one plus(加一) python实现
题目描述: 中文: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头 ...
- 力扣—climbing stairs(爬楼梯) python实现
题目描述: 中文: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 英文: You are cl ...
随机推荐
- JAVA实现对阿里云DNS的解析管理
1.阿里云DNS的SDK依赖 <dependency> <groupId>com.aliyun</groupId> <artifactId>tea-op ...
- uniapp如何生成自己的小程序码并且携带参数
生成小程序码需要用到的参数appId appSecret这两个参数可以再微信公众平台里面登录获取 也可以用测试号里面的获取小程序码步骤1.首先要请求官方的API`https://api.weixin ...
- Express框架的简单使用
Express框架的简单使用 这个框架是基于Node.js的框架平台 需要先安装node.js 安装完node.js后使用指令操作 npm init --yes 初始化 npm i express 安 ...
- C++构造函数语义学(一)(基于C++对象模型)
如果一个类没有自己的构造函数,编译器会在需要的时候为其合成一个出来,俗称:合成默认构造函数.但是请注意是在需要的时候,并不是所有情况. 请看下面代码: 1 #include<iostream&g ...
- python初学笔记之列表推导式
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表.注意:简而言之,就是把普通的多行for循环压缩成一行代码,这种压缩语法适用于列表.字典.集合等可迭代数据结构(iterables).创建 ...
- JavaIo流入门篇之字节流基本使用。
一 基本知识了解( 字节流, 字符流, byte,bit是啥?) /* java中字节流和字符流之前有接触过,但是一直没有深入的学习和了解. 今天带着几个问题,简单的使用字节流的基本操作. 1 什么 ...
- Gitee 自已提交的代码提交人头像为他人、码云上独自开发的项目显示为 2 个开发者
简介 自己写的代码提交到码云(Gitee)上却变成了两个人,一个被正确的代码提交统计了,另一个却没有,并且确信自己输入的Gitee账号是自己绑定的邮箱,具体如下: 解决办法 查看自己的用户名 git ...
- 基于redis实现tomcat的session会话保持 (转)
出处:https://cloud.tencent.com/developer/article/1402997 基于redis实现tomcat的session会话保持 在实际生产中,我们经常部署应用服务 ...
- 使用C++开发PHP扩展
目前,PHP编程语言也是相当成熟,各种文档,各种问题,只要Google一下,总有你想要的答案.当然"如何开发PHP扩展"的文章也不少,但是很少有专门来介绍使用C++开发PHP扩展的 ...
- Apache中commons包的各种jar的功能说明
commons-logging.jar -----记录日志,通常和 log4j.jar共同使用 commons-beanutils.jar(1.1) 主要提供Bean的 ...