零基础python刷leetcode -- 2. Add Two Numbers

算法很重要,但是每天也需要学学python,于是就想用python刷leetcode 的算法题,和我一起开始零基础python刷leetcode之旅吧。

2. Add Two Numbers

image.png

首先过一下python的一些基础知识,非小白请直接跳过

链表

从提示代码可以看出这里涉及到单链表结构,代码如下:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None
  • 链表由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间。

  • 使用链表结构可以克服数组需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。

  • 但是链表失去了数组随机读取的优点

  • 同时链表由于增加了结点的指针域,空间开销比较大。

链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表 双向链表 以及 循环链表 。链表可以在多种编程语言中实现。

链表是数据结构中最基本常用的,C++语言中单链表是利用指针操作实现的,python作为面向对象编程的,可以使用创建一个ListNode类来实现链表,利用类的属性引用来代替指针操作。

链表

表头,指针,结点等概念请自行百度。

下面我们创建了一个节点类,然后编写了几个链表操作,包括创建,插入,删除,输出等。代码如下:

class ListNode():     # 初始化 构造函数  
    def __init__(self,value):  
        self.value=value  
        self.next=None
  
def Creatlist(n):  
    if n<=0:  
        return False  
    if n==1:  
        return ListNode(1)    # 只有一个节点  
    else:  
        root=ListNode(1)  
        tmp=root  
        for i in range(2,n+1):       #  一个一个的增加节点  
            tmp.next=ListNode(i)  
            tmp=tmp.next  
    return root            # 返回根节点  
  
def printlist(head):       # 打印链表 (遍历) 
    p=head  
    while p!=None:  
        print p.value  
        p=p.next  
  
def listlen(head):       # 链表长度  
    c=0  
    p=head  
    while p!=None:  
        c=c+1  
        p=p.next  
    return c  
  
def insert(head,n):         # 在n的前面插入元素  
    if n<1 or n>listlen(head):  
        return  
  
    p=head  
    for i in range(1,n-1):  # 循环四次到达 5  (只能一个一个节点的移动 range不包含n-1)
        p=p.next  
    a=raw_input("Enter a value:")  
    t=ListNode(value=a) 
    t.next=p.next   
    p.next=t   
    return head       
  
def dellist(head,n):  # 删除链表  
    if n<1 or n>listlen(head):  
        return head  
    elif n is 1:  
        head=head.next   # 删除头  
    else:  
        p=head  
        for i in range(1,n-1):    
            p=p.next     # 循环到达 2次   
        q=p.next  
        p.next=q.next    # 把5放在3的后面  
    return head  
  
  
def main():  
    print "Create a linklist"  
    head=Creatlist(7)  
    printlist(head)  
    print  
    print "___________________________"  
  
    n1=raw_input("Enter the index to insert")  
    n1=int(n1)  
    insert(head,n1)  
    printlist(head)  
    print  
    print "___________________________"  
  
    n2=raw_input("Enter the index to delete")  
    n2=int(n2)  
    dellist(head,n2)  
    printlist(head)  
  
  
if __name__=='__main__':  main()   # 主函数调用  

题目

这道题目是要将两个单链条相加。输出得到的新链条。

类似加法的原理, 我们从低位(链条第一位)开始,同位相加,满10高位+1

        ans = ListNode(0)
        tmp = ans
        tmpsum = 0
        while True:
            #依次遍历l1 l2,对应位相加
            if l1 != None:
                tmpsum += l1.val
                l1 = l1.next
            if l2 != None:
                tmpsum += l2.val
                l2 = l2.next
            tmp.val = tmpsum % 10     # 除10取余作为当前位的值
            tmpsum //= 10                #除10取整,即高位,作为指针的下个结点 进行加法运算
            if l1 == None and l2 == None and tmpsum == 0:
                break
            tmp.next = ListNode(0)
            tmp = tmp.next
        return ans
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容