前言
- 有Python基础
- 有数据结构单链表基础,不清楚的可以参考前面的博客
https://blog.youkuaiyun.com/sf9898/article/details/104946291
问题描述
给出两个非空的链表,用来表示两个非负的整数,他们的位数是按逆序存储的,
并且每一个节点都只能存储一个数字。如果将这两个数相加,则会返回一个新的链表
来表示他们的和。可以假设除了数字0之外,这两个数都不会以0开头。
- 输入输出这一块划重点,这里的输入输出是比较抽象的,大致意思对了就行,不是牛客网那种格式化输入。
输入(1 -> 6 -> 4)+ (3 -> 1 -> 2)
输出 (4 -> 7 -> 6)
原因是 461+213 = 674
分析及实现
part1.分析与定义
- 题目要求是用的链表,那么首先先定义链表类。
- 关于数据的合法性:一般不会为难人,给的都会是合法数据,不用判断负数。也不用纠结要是节点存不是一个数字的情况。输入的都只能是合法的字符。
- 关于输入,怎么输入就怎么存,也就是说输入也是逆序的。
class Node(object):
def __init__(self, item):
self.item = item
self.next = None
class Link(object):
def __init__(self):
self.__head = None
- 接下来再写几个可能会用到的函数。比如插入和删除等。题目中说位数是按照逆序存储的,那么假设从尾部插入,第一个数进来1,第二次进来6,第三次进来4,那么根据这个想法,得到的链表从头到尾是不是164,是不是符合题意?实际上表示的数是461,实现了逆序存储,因此在插入这一块应该写尾部插入。
def addBack(self, item):
node = Node(item)
if self.__head is None:
self.__head = node
ret