Leetcode2——两数相加
程序员文章站
2022-04-04 09:05:43
...
思路分析:
1.进位问题:11 + 99 = 110
2.长度不相等:123 + 45678
3.多出一位:560+560=1120
代码解读:
- 定义两个结点对象q,p(其实就是指向该结点对象的指针,因为对象都是地址嘛)
- s用来解决仅为问题和多出一位的问题,它是一个进位标志。后面具体讲
- while语句表示当l1非空或者l2非空或者s=0时,停止循环。前两个条件很好理解。重点讲一下s=0
当l1或者l2非空时,循环肯定没结束,s可以为0,也可以不为0
当l1或者l2都空了,说明两个列表都遍历完了,这时如果s不等于0,则一定等于1,这时就是属于第三种情况了,需要单独将这个进位加进链表中。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
q = p = ListNode(None) # 新建一个链表(只有头节点)
s = 0
while l1 or l2 or s:
s += (l1.val if l1 else 0) + (l2.val if l2 else 0) # 列表按位相加,每次循环需要检查s的基础值,即上一位数有没有进位情况
p.next = ListNode(s % 10) # 将按位相加得到的数加到链表末端,考虑了进位
p = p.next # p指针后移
s //= 10 # 取出进位数的值,一般为0或者1。0表示没有进位,1表示有进位
l1 = l1.next if l1 else None # 遍历列表直到None
l2 = l2.next if l2 else None
return q.next # q的第一个结点是头节点,所以返回next
上一篇: Leetcode:204. 计数质数
下一篇: leetcode2两数相加题目