刚开始刷力扣的题目,还是个菜鸟,写不出大佬那样简洁高效的代码,但是希望通过自己的坚持和努力有一天也变成大佬~
题目描述:
???????
?
废话不多说先上代码:
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
re = temp = ListNode(None)
flag = 0
add = 0
while l1 and l2:
add += l1.val + l2.val + flag
flag = 0
if add >= 10:
flag += 1
temp.next = ListNode(add%10)
add = 0
temp = temp.next
l1 = l1.next
l2 = l2.next
while l1 and not l2:
add += l1.val + flag
flag = 0
if add == 10:
flag += 1
temp.next = ListNode(add%10)
add = 0
temp = temp.next
l1 = l1.next
while l2 and not l1:
add += l2.val + flag
flag = 0
if add == 10:
flag += 1
temp.next = ListNode(add%10)
add = 0
temp = temp.next
l2 = l2.next
if flag == 1:
temp.next = ListNode(1)
return re.next
再上执行结果:
如图所示,代码写得很一般,但是代码虽然看起来比较的麻烦,个人认为其实比较简单易懂,新手应该比较容易想到。简单说一下思路:
1、设置双指针,一个用来插入新节点,一个用来返回。
2、设置进位指示器。
3、先考虑l1和l2都没用完的情况。
4、再考虑l1和l2有一个用完的情况。
5、不要忘了如果两个链表都已经用完但是还有进位的情况哦。
tips:进位指示器flag和add用完以后不要忘了重置为0。
总结:如果对链表的基本操作不太熟悉,对于这道题可能需要多加思考,我看过几个大佬写的代码,可以直接把and 改成or,这样就不用写后面两个while循环了,代码看上去非常的短小精悍。然而我照着写出来的代码总是报错。。。。。。应该是我的问题哈哈哈,希望二刷的时候自己能想出来更好的写法!
|