Leetcode2.两数相加(链表)
解题思路
1.定义两个指针dummy和tail分别指向创建出来的0节点
写法:ListNode(0)
dummy = tail = ListNode(0)
2.两数相加先从低位开始加
每一位的值 = (链表的值+进位)%10
3.如何确定是否有进位
s//=10 # 向下取整 若为0,则表示无进位,若为1,则表示有进位
3.如何把值放入链表
tail.next =ListNode(s%10)
4.结束条件
两个链表 和 进位 都为 空
5.retrun
因为一开始定义了两个指针,dummy指针一直指向链表的头节点的上一个0节点
return dummy.next
代码实现
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
#dummy 和 tail 两个指针同时指向创建出来的0这个listnode
dummy = tail = ListNode(0)
s = 0
while l1 or l2 or s:
s+=(l1.val if l1 else 0) +(l2.val if l2 else 0)
tail.next =ListNode(s%10) #取余
tail = tail.next
s//=10 #向下取整 判断是否存在进位 有进位为1 没有进位为0
l1=l1.next if l1 else None
l2=l2.next if l2 else None
return dummy.next #dummy 始终指向创建出来来的头节点的前一个结点0