力扣第二题 大数相加 ,链表在python到底该怎么写?
2024-10-19 16:57:38
但问题在于链表的表示 如何创建一个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
最新文章
- 【Spring】SpringMVC入门示例讲解
- Unity UGUI RectTransform图解
- C语言学习笔记之成员数组和指针
- LintCode ";Coins in a Line II"; !
- JS事件驱动机制
- 对match() 和 exec() 返回值和属性的测试
- HttpClient中post请求http、https示例
- 第1章 网络编程基础(2)——Socket编程原理
- KEIL简单实例
- Photon的使用
- STM32GPIO口8种模式细致分析(类比51单片机)
- String与Date(java.util.Date)互转(转)
- 201521123100 《Java程序设计》第5周学习总结
- 分布式逻辑管理平台XXL-GLUE
- ORACLE中用户等系统信息操作
- Mybatis学习4——一对一关联查询方法1--创建实体
- Java Base64加密解密
- 比较windows phone 的回退事件与android的回退事件
- linux下安装pip以及导入第三方包
- MySQL提权之user.MYD中hash破解方法