欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Leetcode2——两数相加

程序员文章站 2022-04-04 09:05:43
...

Leetcode2——两数相加
思路分析:
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,这时就是属于第三种情况了,需要单独将这个进位加进链表中。
    Leetcode2——两数相加
# 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刷题之路