目录
- 1. 题目:
- 2. 我的代码:
- 3. 别人的代码:
- 小结:
1. 题目:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
2. 我的代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
# 定义个result
result = ListNode();
result_return = result;
# 存储 进位
plus_next = 0;
# 循环体
while l1 != None or l2 != None:
# 计算求和结果
plus = l1.val + l2.val + plus_next;
# 判断是否要进位
plus_next = 0;
p = False;
if plus > 9:
p = True;
plus_next = plus // 10;
plus %= 10;
# 当前位加和
result.val = plus;
if l1.next == None and l2.next == None and p == False:
l1 = l1.next;
l2 = l2.next;
break
# 下一阶
result.next = ListNode();
if l1.next == None:
l1.next = ListNode();
l1.next.val = 0;
if l2.next == None:
l2.next = ListNode();
l2.next.val = 0;
result = result.next;
l1 = l1.next;
l2 = l2.next;
return result_return;
框架是1.定义预先用到的变量,2.循环,3.返回值
重点是循环:
- 循环内首先计算出此位数相加后的结果(这里包括前一位的进位)
- 如果计算出来的值大于9的话则说明要向下一位进位(进位的值就是对10求除,保留的值就是对10求余)
- 此位加上保留的值后就无需多虑了
- 然后就要考虑下一位该如何处理,看似可以方向到下一阶段,但是因为有可能一个链表完了但是另一个链表没完,然后就退出循环了。所以,这里最优(如果不这样后面会出一些问题,可能会出现最后一个数字是0的情况)的办法就是续上链表(# 下一阶),续上的值当然为0
- 然后什么时候结束呢?那就是再在他们两个的next都是空的时候,但是,比如8+8=16,这里并不能直接结束,还需要一个条件就是:不进位。在不进位的时候他们继续往下续链表,然后算出0+0+6=6
3. 别人的代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
cur = 0
n1, n2 = l1, l2
head = ListNode()
node = head
while n1 or n2 or cur:
if n1:
cur += n1.val
n1 = n1.next
if n2:
cur += n2.val
n2 = n2.next
node.next = ListNode(cur % 10)
node = node.next
cur //= 10
return head.next
由于位数是严格一一对应的,所以不会错位,所以可以if n1和if n2这样判断且直接相加求val的值,达到不越链表的界的效果。
小结:
关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
添加我的公众号即可: