但问题在于链表的表示  如何创建一个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

最新文章

  1. 【Spring】SpringMVC入门示例讲解
  2. Unity UGUI RectTransform图解
  3. C语言学习笔记之成员数组和指针
  4. LintCode &quot;Coins in a Line II&quot; !
  5. JS事件驱动机制
  6. 对match() 和 exec() 返回值和属性的测试
  7. HttpClient中post请求http、https示例
  8. 第1章 网络编程基础(2)——Socket编程原理
  9. KEIL简单实例
  10. Photon的使用
  11. STM32GPIO口8种模式细致分析(类比51单片机)
  12. String与Date(java.util.Date)互转(转)
  13. 201521123100 《Java程序设计》第5周学习总结
  14. 分布式逻辑管理平台XXL-GLUE
  15. ORACLE中用户等系统信息操作
  16. Mybatis学习4——一对一关联查询方法1--创建实体
  17. Java Base64加密解密
  18. 比较windows phone 的回退事件与android的回退事件
  19. linux下安装pip以及导入第三方包
  20. MySQL提权之user.MYD中hash破解方法

热门文章

  1. Pyomo+GLPK使用
  2. 问题记录——BigDecimal保留两位小数及格式化成百分比
  3. golang中的标准库http
  4. Python36 使用Redis 构建分布式爬虫(未完)
  5. fluentd分布式日志管理系统
  6. migrate 和makemigrations 命令
  7. ESP32S2小项目-FM-网络时钟/电台-Arduino开发环境
  8. jsp 4-14 知识总结
  9. Abp 审计模块源码解读
  10. AtCoder Beginner Contest 220 A-F