但问题在于链表的表示  如何创建一个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. Sentry 开发者贡献指南 - 测试技巧

    作为 CI 流程的一部分,我们在 Sentry 运行了多种测试. 本节旨在记录一些 sentry 特定的帮助程序, 并提供有关在构建新功能时应考虑包括哪些类型的测试的指南. 获取设置 验收和 pyth ...

  2. 【解决了一个问题】腾讯云中使用ckafka生产消息时出现“kafka server: Message contents does not match its CRC.”错误

    初始化的主要代码如下: config := sarama.NewConfig() config.Producer.RequiredAcks = sarama.WaitForAll // Wait fo ...

  3. CVE-2021-26119 PHP Smarty 模版沙箱逃逸远程代码执行漏洞

    0x00 漏洞介绍 smarty是一个基于PHP开发的PHP模板引擎.它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设 ...

  4. gorm创建记录及设置字段默认值

    package main import ( "database/sql" "gorm.io/driver/mysql" "gorm.io/gorm&q ...

  5. 前端 | Vue nextTick 获取更新后的 DOM

    前两天在开发时遇到一个需求:打开对话框的时候自动聚焦其中的输入框.由于原生的 autofocus 属性不起作用,需要使用组件库提供的 focus 方法手动手动获取焦点.于是有如下代码: <el- ...

  6. /etc/passwd详解

    root:x:0:0:root:/root:/bin/bash  bin:x:1:1:bin:/bin:/sbin/nologin  daemon:x:2:2:daemon:/sbin:/sbin/n ...

  7. linux移动文件与删除文件

    目录 一:移动文件 二:删除文件 一:移动文件 移动文件相当于剪切. 格式: mv[移动文件的原路径][移动文件的新路径] 案例: 1.移动文件 案例1:将/root目录下的1.txt移动到/opt目 ...

  8. 《Effective TypeScript》条款22 - 类型收缩

    本文主要记录书中关于TypeScript类型收缩的内容 本文主要内容如下 类型收缩的一些方法 条件判断 抛错误 instanceof 和 in 属性检查 "标签联合"或" ...

  9. Activity 不只有跳转。功能篇(一)

    Activity生命周期 1:activity四种启动方式 standard,SingleTask,SingleTop,SingleInstance standard:是系统默认的,每次启动该acti ...

  10. StringUtils.isBlank(str)和StringUtils.isEmpty(str)的区别

    1.StringUtils.isEmpty(CharSequence cs)实现源码 public static boolean isEmpty(CharSequence cs) { return c ...