1 Star 0 Fork 0

gzqnb/leetcode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
02add.py 2.11 KB
一键复制 编辑 原始数据 按行查看 历史
gzqnb 提交于 2021-05-03 16:57 . 无重复子串
# 输入:l1 = [2,4,3], l2 = [5,6,4]
# 输出:[7,0,8]
# 解释:342 + 465 = 807.
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def addTwoNumbers(self, l1, l2):
# 如果有一个listnode没有填写,就返回剩下一个即可
if l1 == None:
return l2
if l2 == None:
return l1
dummy = ListNode(0)
p = dummy # 设置初始的Listnode,主要是利用listnode的next操作
carry = 0 # carry位主要保存进一操作
# 若l1和l2都还不是None
while l1 and l2:
# 算当前位置的值,并且要加上之前的carry位
p.next = ListNode((l1.val + l2.val + carry) % 10)
carry = (l1.val + l2.val + carry) // 10 # 更新carry位
l1 = l1.next # 更新l1,去掉当前头部第一个元素
l2 = l2.next
p = p.next
# 如果链表长度不相等,l1长,把l1后面的数字都到尾部
if l1:
while l1:
p.next = ListNode((l1.val + carry) % 10)
carry = (l1.val + carry) // 10 # 更新carry位
l1 = l1.next # 更新l1,去掉当前头部第一个元素
p = p.next
if l2:
while l2:
p.next = ListNode((l2.val + carry) % 10)
carry = (l2.val + carry) // 10 # 更新carry位
l2 = l2.next # 更新l1,去掉当前头部第一个元素
p = p.next
# 如果加到最后一位还需要进位,那么就把最后一位加上去,carry最大只可能为1
if carry == 1:
p.next = ListNode(1)
# 此时的p已经不是最开始的p,但是dummy指向了p的地址,用dummy去访问,next才是真正的值
return dummy.next
if __name__ == '__main__':
sol = Solution()
l1: ListNode = ListNode(2, ListNode(2, ListNode(5)))
l2: ListNode = ListNode(1, ListNode(3, ListNode(4)))
res = sol.addTwoNumbers(l1, l2)
print(res.val)
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/gzqnb/leetcode.git
git@gitee.com:gzqnb/leetcode.git
gzqnb
leetcode
leetcode
master

搜索帮助