但问题在于链表的表示  如何创建一个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到底该怎么写?的更多相关文章

  1. 力扣—Reorder List(重排链表)python实现

    题目描述: 中文: 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点 ...

  2. 力扣——Partition List(分隔链表) python实现

    题目描述: 中文: 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = ...

  3. 力扣50题 Pow(x,n)

    本题是力扣网第50题. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 采用递归和非递归思路python实现. class Solution: #递归思路 def myPow_recurs ...

  4. 【力扣】82. 删除排序链表中的重复元素 II

    存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字. 返回同样按升序排列的结果链表. 示例 1: 输入:hea ...

  5. 力扣算法题—069x的平方根

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...

  6. 力扣 ——4Sum (四数之和)python 实现

    题目描述: 中文: 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 targe ...

  7. 力扣—gray code (格雷编码) python实现

    题目描述: 中文: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 英文: Th ...

  8. 力扣—one plus(加一) python实现

    题目描述: 中文: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头 ...

  9. 力扣—climbing stairs(爬楼梯) python实现

    题目描述: 中文: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 英文: You are cl ...

随机推荐

  1. JAVA实现对阿里云DNS的解析管理

    1.阿里云DNS的SDK依赖 <dependency> <groupId>com.aliyun</groupId> <artifactId>tea-op ...

  2. uniapp如何生成自己的小程序码并且携带参数

    生成小程序码需要用到的参数appId  appSecret这两个参数可以再微信公众平台里面登录获取 也可以用测试号里面的获取小程序码步骤1.首先要请求官方的API`https://api.weixin ...

  3. Express框架的简单使用

    Express框架的简单使用 这个框架是基于Node.js的框架平台 需要先安装node.js 安装完node.js后使用指令操作 npm init --yes 初始化 npm i express 安 ...

  4. C++构造函数语义学(一)(基于C++对象模型)

    如果一个类没有自己的构造函数,编译器会在需要的时候为其合成一个出来,俗称:合成默认构造函数.但是请注意是在需要的时候,并不是所有情况. 请看下面代码: 1 #include<iostream&g ...

  5. python初学笔记之列表推导式

    列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表.注意:简而言之,就是把普通的多行for循环压缩成一行代码,这种压缩语法适用于列表.字典.集合等可迭代数据结构(iterables).创建 ...

  6. JavaIo流入门篇之字节流基本使用。

    一 基本知识了解(  字节流, 字符流, byte,bit是啥?) /* java中字节流和字符流之前有接触过,但是一直没有深入的学习和了解. 今天带着几个问题,简单的使用字节流的基本操作. 1 什么 ...

  7. Gitee 自已提交的代码提交人头像为他人、码云上独自开发的项目显示为 2 个开发者

    简介 自己写的代码提交到码云(Gitee)上却变成了两个人,一个被正确的代码提交统计了,另一个却没有,并且确信自己输入的Gitee账号是自己绑定的邮箱,具体如下: 解决办法 查看自己的用户名 git ...

  8. 基于redis实现tomcat的session会话保持 (转)

    出处:https://cloud.tencent.com/developer/article/1402997 基于redis实现tomcat的session会话保持 在实际生产中,我们经常部署应用服务 ...

  9. 使用C++开发PHP扩展

    目前,PHP编程语言也是相当成熟,各种文档,各种问题,只要Google一下,总有你想要的答案.当然"如何开发PHP扩展"的文章也不少,但是很少有专门来介绍使用C++开发PHP扩展的 ...

  10. Apache中commons包的各种jar的功能说明

    commons-logging.jar -----记录日志,通常和  log4j.jar共同使用 commons-beanutils.jar(1.1)                主要提供Bean的 ...