LeetCode算法题
2.两数之和
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解题思路:
- 创建链表数据结构,采用链表指针索引存储数据
- 遍历节点数据,相加,若大于10,则向下个节点进一,直到节点为None
- 返回结果
python 链表数据结构复习
这里只简单介绍单链表,如果想进一步了解,可以看此篇文章——传送门
单链表作为一种数据结构,采用的是节点索引方式实现,每个节点都可以索引到下个节点,每个节点都包含两个部分——即节点数据和下一个节点地址,数据域和指针域
实现方式:
class Listnode:
def __init__(self,val):
self.val = val
self.next = None
知识延伸:
由于None的特殊性,经常用来当作特殊位置判断,关于None的知识点,我就不作赘述,这里有一篇文章详解介绍了None,以及if关于False和True的判断——传送门
代码实现
class ListNode:
def __init__(self,val):
self.val = val
self.next = None
class Solution:
def addTwoNumbers(self,l1,l2):
result = ListNode(0)
cur = result
while l1 or l2:
cur.val += self.addListNode(l1,l2)
if cur.val > 10:
cur.val -= 10
cur.next = ListNode(1)
else:
if l1 and l1.next or l2 and l2.next:
cur.next = ListNode(0)
cur = cur.next
if l1:
l1 = l1.next
if l2:
l2 = l2.next
return result
def addListNode(self,l1,l2):
if not l2 :
return l1.val
if not l1:
return l2.val
return l1.val + l2.val